c ++指向同一对象的2个指针

时间:2012-02-07 17:56:34

标签: c++ pointers

我想知道我是否有2个指针指向同一个对象,然后我使用指针1删除它,它仍然在内存中,指针2将指向null,或者对象将保留在内存中我需要使用删除指针2释放它?

我的意思是:

int *p1, *p2;
p1=new int;
p2=p1;
*p1=5;
p2=p1;
delete p1;

int x=*p2;
//Error or x=5?

2 个答案:

答案 0 :(得分:8)

  • 该对象将消失
  • 指针2不是空指针,而是悬空指针,其前一个但现在无效的值;用它做任何事都将是一个错误。 1
  • 指针1也是如此。两者之间没有区别。

1 - 嗯,UB,本身不是“错误”。但是不要这样做。

答案 1 :(得分:1)

通常不要让两个指针指向同一个内存。那是因为如果你删除一个,另一个将是一个悬空指针。

删除后对内存执行的任何操作都是未定义的行为

在您的情况下(我假设您忘记执行p2=p1,正如您的问题所示),int x=*p2;未定义,因为内存p2指向已删除。