在此代码中:
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
工作方式吗?谢谢
最佳答案
从std::unique_ptr reference docs:
构造一个T类型的对象,并将其包装在std :: unique_ptr中。
因此,您正在构造一个新副本,由unique_ptr
通过传递x
来管理,而不是通过地址来管理x
。