删除指针并使用已删除对象的字段

时间:2017-05-25 16:39:13

标签: c++ pointers

以下是令我困惑的代码片段:

T* pop(){
 if(head == 0) 
      return 0;
 T* result = head->data;
 Link* oldHead = head;
 head = head->next;
 delete oldHead;
 return result; 
}

result指针用于指向头部对象的“数据字段”。之后,head将被删除。由于result字段与data一起被删除,head是否必须指向空或空格?

1 个答案:

答案 0 :(得分:3)

  

由于result字段与data一起被删除,head是否必须指向空或空格?

执行时

delete oldHead;

oldHead的内存已取消分配。但是,除非delete data的析构函数中也Link,否则data仍然是有效指针。因此,可以返回result并继续使用调用函数中的返回值。

如果你有

Link::~Link() {}

没有问题。

但是,如果你有

Link::~Link() { delete data; }

有问题。