【发布时间】:2013-08-14 00:53:37
【问题描述】:
使用 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 = Xc = Y
通常会在作用域结束时释放的字符 c 会一直存在到程序结束。第二个输出是'Y',表明unique_ptr 不是简单地复制它的值。
是否建议以某种方式延长变量的寿命?
这是安全的,还是与参考具有相同的危险?
【问题讨论】:
-
“对象的生命周期可以延长到其通常范围之外” -- 不,不能。您的程序有未定义的行为。
-
请记住,未定义行为的最严重症状是您的程序表现得像您想要的那样。总是质疑一个工作程序......;)
标签: c++ unique-ptr