我想知道我是否有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?
答案 0 :(得分:8)
1 - 嗯,UB,本身不是“错误”。但是不要这样做。
答案 1 :(得分:1)
通常不要让两个指针指向同一个内存。那是因为如果你删除一个,另一个将是一个悬空指针。
删除后对内存执行的任何操作都是未定义的行为。
在您的情况下(我假设您忘记执行p2=p1
,正如您的问题所示),int x=*p2;
未定义,因为内存p2
指向已删除。