Mas*_*deh 0 c++ pointers memory-management
在下面的代码中,x(原始pinter)和p(唯一指针)都指向变量a;所以值“ a”的变化反映了两个指针的取消引用。我知道“ p”拥有&a的所有权。双重释放?
#include <iostream>
#include <memory>
int main() {
int a = 5;
int *x = &a;
std::unique_ptr<int> p(&a);
*p = 6;
std::cout<< *x << *p <<'\n';
// prints 66
*x =7;
std::cout <<*x <<*p <<"\n";
// 77
std::cout << "Done!"<<'\n';
}
Run Code Online (Sandbox Code Playgroud)
PS我得到这个运行时错误“指针被释放未分配”
Jes*_*uhl 11
std::unique_ptr<int> p(&a);
只是一个错误,因为它a
是一个自动变量,当它超出范围时将被销毁。您刚刚创建了一种情况,其中a 也unique_ptr
将尝试破坏同一对象。只是不要那样做。
您似乎假设如果unique_ptr
对现有对象形成一个,则新对象unique_ptr
将拥有该对象的专有所有权。错了
也; 原始指针在销毁时不会删除它们指向的内容。这与您的原始指针无关。