`operator delete`如何为Linked List的节点释放内存块

时间:2012-03-25 04:04:07

标签: c++

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。这是对的吗?

1 个答案:

答案 0 :(得分:3)

听起来对我不对。

因为struct node是“Plain Old Datatype”,编译器根本不会创建任何析构函数代码,所以不需要专门破坏int或指针。

即使对于非POD类型,编译器默认析构函数也只采用以下形式:

~node() { }

单个成员仍将调用其析构函数,但如果您未分配任何非自动资源,则通常不需要提供析构函数。在某些情况下你可能会这样,但它们有些特殊的目的。

您可能希望在三个规则上引用this question