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