class A
{
public:
int i;
~A()
{
std::cout << "~A" << std::endl;
}
};
class B: public A
{
public:
int k;
~B()
{
std::cout << "~B" << std::endl;
}
};
int main(int argc, char* argv[])
{
A* p = new B();
delete p;
return 0;
}
ベースデストラクタは仮想ではなく、理由はわかっていますが、上記はメモリリークを引き起こしません。
しかし、これは未定義の動作ですか?
ベースデストラクタが非仮想であっても、派生クラスが他の動的データを指していなければ、メモリリークは発生しないと思いますか?