Nic*_*las 3 c++ pointers dynamic-allocation
假设我通过p1以下方式进行动态内存分配,
int* p1 = new int;
*p1 = 1;
Run Code Online (Sandbox Code Playgroud)
我知道引用的内存p1可以通过使用释放
delete p1;
p1 = nullptr;
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有另一个指针p2指向1,我可以delete这个指针,以释放内存?指针会发生什么p1?此外,什么是之间的关系p1和p2本质?例如,
int* p1 = new int;
*p1 = 1;
int* p2 = p1;
// Can I delete p2 like this? And what would happen to p1?
delete p2;
p2 = nullptr;
Run Code Online (Sandbox Code Playgroud)
您可以删除p2,但解除引用p1会导致未定义的行为,以及可能的分段错误.
它的工作原理如下:
p1并p2指向此内存位置.p2删除- p1仍然指向该内存位置.没有泄漏,一切都很好 - 只是不要取消引用p1.你可以自由地做p1 = nullptr,但不能*p1 = 1.此外,您无法删除p1,因为它已被删除,您可能会捕获段错误.