这是如何运作的?指向指针赋值的指针
#include <iostream>
using namespace std;
int main() {
int *p1;
p1 = new int;
int *p2;
p2 = new int;
p2 = p1; // what happens here?
*p1=5;
cout << "pointer 2 is " << *p2 << endl << *p1 << endl; // both give out 5
delete p1; // what happens to p2 ?
cout << "pointer 2 is " << *p2 << endl;
delete p2;
return 0;
}
当我删除指针对象 p1 时会发生什么?什么是指针 p2 现在引用?有人能解释一下吗?谢谢您的帮助
回答
什么是指针 p2 现在引用?
没有。悬空了 它是指向同一件事p1指着,但你已经删除了。
因此,你*p2的坏了,你的delete p2; 这些都有未定义的行为。
您还泄露了 second new int,因为p2曾经指向它但在您编写时停止这样做p2 = p1(您将其更改为指向第一个 new int,就像p1那样),并且没有其他方法可以引用它。