在此代码中:

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

07-27 13:32