Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除指针并使用已删除对象的字段_C++_Pointers - Fatal编程技术网

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应该发布一个