在下面的代碼:刪除析構函數調用內
class Base {
public:
virtual ~Base(){}
};
class Derived : public Base
{
Derived* d;
public:
~Derived()
{
delete d;
}
Derived():d(NULL){}
};
int main()
{
Base* b = new Derived;
delete b;
return 0;
}
並調用delete d;
內源性的析構函數導致遞歸在析構函數調用?
只要'd是!= nullptr'就可以。否則'刪除nullptr;'是無操作。 – Jarod42 2014-10-31 08:21:32
取決於如何初始化'd';如果是'this',那麼是的,如果是到另一個對象(例如在鏈中),那麼可能不是(取決於鏈)。 – Niall 2014-10-31 08:22:56
是的,它的確如此。這是一個鏈表的典型例子。 – 2014-10-31 08:26:00