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;
}
上面不會導致內存泄漏雖然鹼析構函數不是虛擬和我知道的原因。這是未定義的行爲嗎?
但是這種未定義的行爲與否?
說也不會有內存泄漏如果派生類不指向其它動態數據,即使基地析構函數非虛擬?
你有沒有遇到這樣的代碼(派生類不指向動態數據),導致漏氣? –
@new_perl是的,但是派生類析構函數也釋放了一些內存。 –
這肯定會發生。但我在談論派生類析構函數不需要明確釋放任何東西的情況。 –