c++ - 默认析构函数是否释放成员指针指向的内存?

标签 c++ pointers destructor

删除链表中的节点时,是否需要将next设置为NULL?

ListNode 是这样定义的

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x): val(x) {}
}

现在我想删除 m

之后的节点
ListNode *tmp = m->next;
m->next = m->next->next;
delete tmp;

如果tmp->next会在析构函数中被删除,链表应该有麻烦了。但是,如果tmp->next没有被删除,可能还有一种情况会导致内存泄露:

ListNode *tmp = new ListNode(0);
tmp->next = new ListNode(1);
delete tmp;

如果tmp->next没有被删除,就没有办法再次找到这 block 内存。

所以这是一个两难的问题,默认析构函数实际上做了什么?

最佳答案

默认析构函数会销毁所有成员变量(具有析构函数的)并且不执行任何其他操作。

ListNode 的成员变量都没有析构函数,因此 ListNode 的默认析构函数不执行任何操作。

请注意,虽然 next 是一个成员变量,但 next 指向的不是。

关于c++ - 默认析构函数是否释放成员指针指向的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606901/

相关文章:

c++ - 在类型特征中使用可变参数省略号来表示计时持续时间

c++ - OpenCV Mat 数据结构

c++ - Python 嵌入 C++

c - 传递指针的free() 'know'如何有效?

c++ - 类外的默认构造函数/析构函数?

c++ - DirectX11 2 窗口渲染

ios,从 View 中获取指向 Controller 的指针

c - 将指针传递给 gets() 时在结构中使用指针有什么问题?

c++ - 记住最初的对象,它只能管理共享内存

c++ - Delete[] 没有调用元素析构函数