C++ 删除指针并使用已删除对象的字段
下面是让我困惑的代码片段:C++ 删除指针并使用已删除对象的字段,c++,pointers,C++,Pointers,下面是让我困惑的代码片段: T* pop(){ if(head == 0) return 0; T* result = head->data; Link* oldHead = head; head = head->next; delete oldHead; return result; } 结果指针指向头部对象的“数据字段”。之后,head被删除。由于数据字段与标题一起删除,因此结果是否必须指向null或空白 由于数据字段与标题一起删除,因此结果是否必须
T* pop(){
if(head == 0)
return 0;
T* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}
结果
指针指向头部对象的“数据字段”。之后,head
被删除。由于数据
字段与标题一起删除,因此结果
是否必须指向null或空白
由于数据
字段与标题一起删除,因此结果
是否必须指向null或空白
当你执行
delete oldHead;
oldHead
的内存已释放。但是,除非在链接
的析构函数中也删除数据
,数据
仍然是有效的指针。因此,可以返回result
并继续在调用函数中使用返回值
如果你有
Link::~Link() {}
Link::~Link() { delete data; }
没问题
然而,如果你有
Link::~Link() {}
Link::~Link() { delete data; }
出现问题。链接析构函数是否清理数据?如果不是,那么不是。什么是链接?头是什么?我无法编译您的示例…数据由head指向,删除head时数据不会被删除。@RichardCriten这取决于他是否为Link编写了析构函数,如果在Link的析构函数中调用delete on data,则数据会被删除。@Eddge仅对提供的代码进行注释。我同意OP应该发布一个