struct node
{
node(int _value, node* _next) : value(_value), next(_next) {}
int value;
node* next;
};
node *p = new node(10, NULL);
delete p;
根据我的理解,operator delete
将首先调用node
的析构函数,然后释放最初为p
分配的原始内存块。
由于struct node
不提供自定义的析构函数,编译器将提供默认的析构函数。
问题1 >默认析构函数是什么样的? 例如,
node::~node()
{
next = NULL;
}
问题2 >我们应该为struct node
定义析构函数吗?
我假设我们不必明确提供这样的析构函数。原因是成员变量next
不拥有指向的资源,它表现为weak_ptr
。这是对的吗?
答案 0 :(得分:3)
听起来对我不对。
因为struct node
是“Plain Old Datatype”,编译器根本不会创建任何析构函数代码,所以不需要专门破坏int或指针。
即使对于非POD类型,编译器默认析构函数也只采用以下形式:
~node() { }
单个成员仍将调用其析构函数,但如果您未分配任何非自动资源,则通常不需要提供析构函数。在某些情况下你可能会这样,但它们有些特殊的目的。
您可能希望在三个规则上引用this question。