Я опытный разработчик C, который только что попал на С++, и я должен признать, я очень смущен тем, как много способов создавать, сохранять и уничтожать объекты С++. В C жизнь проста: назначение с = копиями в стеке и malloc/free управление данными в куче. С++ далек от этого, или так мне кажется.
В свете этого, вот мои вопросы:
- Каковы все способы создания объекта С++? Direct/copy конструктор, назначение и т.д. Как они работают?
- Каковы все различные синтаксисы инициализации, связанные со всеми этими типами создания объектов? Какая разница между
T f = x,T f(x);,T f{x};и т.д.? - Самое главное, когда правильно копировать/назначать/все
=на С++ и когда вы хотите использовать указатели? В C я очень сильно использовал множество указателей, потому что назначение указателя дешево, но копирование структуры меньше. Как это влияет на семантику копирования С++? - Наконец, что это такое, как
shared_ptr,weak_ptrи т.д.?
Прошу прощения, если это несколько широкий вопрос, но я очень смущен, когда использовать что (даже не упоминая о моем замешательстве в управлении памятью в коллекциях и операторе new), и я чувствую, что все Я знал, что управление памятью C распадается на С++. Это правда, или моя ментальная модель просто неверна?
Подводя итог: как создаются, инициализируются и уничтожаются объекты С++ и когда я должен использовать каждый метод?