Каков жизненный цикл объекта 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 ++ и когда мне следует использовать каждый метод?