Для объекта его деструктор вызывается, когда он выходит за пределы области видимости. Вот моя программа:
#include <iostream>
using namespace std;
class A {
public:
A() {}
~A() { cout << "A's destructor called!" << endl; }
};
class B {
public:
B() = delete;
B(int x_) {}
~B() { cout << "B's destructor called!" << endl; }
};
void func_a() { A a(); }
void func_b() { B b(1); }
int main() {
cout << "A" << endl;
func_a();
cout << "B" << endl;
func_b();
cout << "bye" << endl;
return 0;
}
Я думал, что будет вызван деструктор A или B. Но дело в том, что вызывается только деструктор B. Я очень смущен. Это из-за способа хранения класса? Выход:
A
B
B's destructor called!
bye
Изменить это
void func_a() { A a(); }
к этому
void func_a() { A a; }
В вашем коде a
— это объявление функции, а не объект.
Поместите оператор cout <<
в конструктор. Вы увидите, что конструктор для A
также не вызывается.
Ах, да, самый неприятный разбор