【发布时间】:2014-12-27 12:11:00
【问题描述】:
在以下代码中:
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;
}
Derived 析构函数内的调用delete d; 会导致析构函数调用中的递归吗?
【问题讨论】:
-
可以,只要
d is != nullptr。否则delete nullptr;无效。 -
取决于
d的初始化方式;如果到this,那么是的,如果到另一个对象(例如在链中),那么可能不是(取决于链)。 -
是的,确实如此。这是一个典型的链表示例。
标签: c++ destructor delete-operator