在此代码中:
using namespace std;
int main() {
int x = 11;
int* rawPointer = &x;
unique_ptr<int> integerPointer = make_unique<int>(x);
cout << *rawPointer << std::endl;
x++;
cout << *rawPointer << std::endl;
return 0;
}
当我们要求rawPointer
的值时,输出为:
11
12
这是正确的。但是,当我们要求integerPointer
的值时,恰好是唯一的pointer
,我们得到输出:
11
11
我原本以为它的行为就像rawPointer
一样。这是为什么?这真的是独特pointers
的工作方式吗?
由于
答案 0 :(得分:1)
来自std::unique_ptr reference docs:
构造一个T类型的对象并将其包装在std :: unique_ptr。
中
因此,您需要通过传递unique_ptr
来构建由x
管理的新副本,而不是按地址管理x
。