我有一个单链表,它有一个指向其下一个节点和数据的指针(这是一个指向对象的指针)。我的问题是,当我仅使用删除删除链表的节点时,该节点指向的对象也会自动删除,或者我会得到一个悬空指针。对象的析构函数会在这里发挥作用吗?
一般来说,答案是否定的:当你
delete node
时,你的节点指向的数据不会被自动删除,因为C++中没有自动规则来做到这一点。但如果 Node 类的析构函数调用 delete data
,那么数据将被删除。您可以执行以下操作来检查它:为数据对象类实现析构函数或在现有析构函数中放置断点,然后调试调用删除节点的代码。如果您需要在删除节点时销毁数据,请确保 Node
析构函数调用 delete data
,如下所示:
class Data
{
~Data()
{ // set a breakpoint on this line or do console output
}
}
class Node
{
Data* data;
Node* next;
~Node()
{
// delete data automatically when the node is deleted
if(data) delete data;
}
}
示例代码只是为了说明删除节点和删除数据对象之间的关系。