从堆栈分配的原始指针构造智能指针

问题描述 投票:0回答:2

有人可以启发我这里发生的事情吗?

int* stackint = new int(5);

{
    std::unique_ptr<int> myInt(stackint);    
    *myInt = 8;

}

std::cout << *stackint; // 0

这里到底发生了什么?当您使用new或make_unique构造智能指针时,我了解智能指针,将堆栈指针传递给它们的构造函数时会发生什么?

c++ smart-pointers
2个回答
0
投票

该代码具有未定义的行为。

std::unique_ptr<int> myInt(stackint);构造一个拥有对象unique_ptr指向]的对象stackint。指针本身具有的存储类型无关紧要,仅将其value传递给cosntructor。

myInt的析构函数随后在块(})的末尾被调用,并销毁它管理的int仍指向的stackint,这意味着stackint的值现在是无效的指针值

然后您用*stackint取消引用该无效的指针值,这将导致未定义的行为。


0
投票

这里是注释:

© www.soinside.com 2019 - 2024. All rights reserved.