以下のサンプル コードで、基底クラスのデストラクタが 2 回呼び出されるのはなぜですか?
class Base {
public:
Base() {
std::cout << "Base::Base()" << std::endl;
}
~Base() {
std::cout << "Base::~Base()" << std::endl;
}
};
class Derived : public Base {
public:
Derived() {
std::cout << "Derived::Derived()" << std::endl;
}
~Derived() {
std::cout << "Derived::~Derived()" << std::endl;
}
};
int main() {
Base a = Derived();
return EXIT_SUCCESS;
}
プログラムを実行したときの出力のサンプルを次に示します。
Base::Base()
Derived::Derived()
Derived::~Derived()
Base::~Base()
Base::~Base()