Конструктор вызывается автоматически в момент создания объекта:
- При объявлении локальной переменной:
MyClass obj;
- При динамическом выделении памяти:
MyClass* ptr = new MyClass();
- При передаче объекта по значению в функцию.
- При возврате объекта по значению из функции.
- При создании временного объекта.
- При инициализации элементов массива:
MyClass arr[3];
- При создании объекта как члена другого класса.
- При наследовании, сначала вызываются конструкторы базовых классов.
Деструктор вызывается автоматически в момент уничтожения объекта:
- При выходе объекта за область видимости (для локальных переменных).
- При явном удалении объекта, созданного с
new: delete ptr;
- При завершении программы (для статических и глобальных объектов).
- При удалении элементов массива, созданного с
new[]: delete[] arr;
- При уничтожении объекта, содержащего другие объекты как члены.
- При наследовании, сначала вызываются деструкторы производных классов.
Порядок вызова зависит от типа хранения объекта и иерархии наследования. Для локальных объектов порядок вызова конструкторов соответствует порядку объявления, а деструкторов — обратному порядку. Для базовых и производных классов: сначала конструктор базового, затем производного; деструкторы в обратном порядке.
cpp