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