使用 C++11 unique_ptr
,对象的生命周期似乎超出了其通常的范围,如下面(相当人为的)示例所示:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<char> uPtr(nullptr);
{
char c = 'X';
cout << "c = " << c << endl;
uPtr.reset(&c);
c = 'Y';
}
cout << "c = " << *uPtr << endl;
return 0;
}
输出:
c = X
c = Y
通常在作用域结束时释放的字符 c 会一直存在到程序结束。第二个输出是“Y”,表明
unique_ptr
不是简单地复制其值。是否建议以某种方式延长变量的生命周期?
这是安全的,还是与引用相同的危险?
最佳答案
不,不能。
不,它不会,它会像往常一样存活到范围结束。
你说得对,unique_ptr
不会复制它指向的值。但是您在此处的输出无关紧要,因为当您取消引用该指针时,您的代码具有未定义的行为,因为它指向的对象不再存在。当 unique_ptr
被销毁时,代码再次具有未定义的行为,并在该位置调用 delete
(尽管您可以提供无操作删除器)。
显然没有和没有。
是的,这类似于从函数返回对局部变量的引用。它甚至更类似于有一个悬空指针并取消引用它,另外还有在该位置调用 delete
以获得额外的未定义行为。
关于c++ - 通过 std::unique_ptr 扩展变量的生命周期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18221555/