A" << std::endl; }
~A() {std::cout << "destroy A" << std::endl; }
};
class C {
public:
C() {std::cout << "create C" << std::endl; }
~C() {std::cout << "destroy C" << std::endl; }
};
class B: public A {
public:
B() {std::cout << "create B" << std::endl; }
~B() {std::cout << "destroy B" << std::endl; }
private:
C c;
};
int main() {
B b;
A a = b;
}
Объясните, пожалуйста, почему так: A, C, B, ~A, ~B, ~C, ~A.
Почему деструктор A вызывается 2 раза, а конструктор всего 1? Как он второй раз вообще что-то деструктуирует?
B b; Конструируется А как база B, C как член B, сам B. A a = b; Конструируется A с помощью конструктора копирования A( const A& ) Из объекта b Ты это не видишь, потому что A( const A& ) ты явно не определял, это сделал компилятор неявно. Далее, по } Вызываются деструкторы локальных автоматических объектов a и b в произвольном порядке Для a - ~A Для b - ~B, затем члена c - ~C, затем базы A - ~A
Обсуждают сегодня