有人可以启发我这里发生的事情吗?
int* stackint = new int(5);
{
std::unique_ptr<int> myInt(stackint);
*myInt = 8;
}
std::cout << *stackint; // 0
这里到底发生了什么?当您使用new或make_unique构造智能指针时,我了解智能指针,将堆栈指针传递给它们的构造函数时会发生什么?
该代码具有未定义的行为。
std::unique_ptr<int> myInt(stackint);
构造一个拥有对象unique_ptr
指向]的对象stackint
。指针本身具有的存储类型无关紧要,仅将其value传递给cosntructor。
myInt
的析构函数随后在块(}
)的末尾被调用,并销毁它管理的int
仍指向的stackint
,这意味着stackint
的值现在是无效的指针值
然后您用*stackint
取消引用该无效的指针值,这将导致未定义的行为。
这里是注释: