C++ 11/14 Unique Pointer 不是那么独特吗?

C++ 11/14 Unique Pointer not so unique?

我刚刚发现一个 unique_pointer 引用作为函数参数传递的情况。于是我看了一下,发现代码居然是comping and 运行。

为什么这可能? 当您可以引用该指针时,该指针如何唯一?

这是我的例子:

class Foo{
    public:
    int bar{23};
};

void Bar(std::unique_ptr<Foo>& a_foo){
    a_foo->bar = 42;
}

int main(int argc, char *argv[]){

    auto foo{ std::make_unique<Foo>() };
    Bar(foo);
    std::cout << foo->bar << std::endl; //outputs 42

    return 0;
}

How is a pointer unique when you can have reference of that pointer?

您可以根据需要拥有任意多个对该指针的引用,但实际上仍然只有一个。

删除 &,以便您尝试复制 unique_ptr,您的程序将无法构建。不允许 clone/copy 指针,这样不止一个指针指向同一事物。这就是 "unique" 的意思。

引用不会创建指针的新实例。仅仅因为您可以引用指针并不意味着它不是唯一的。我可以用名字来称呼你,但这并不意味着我每次使用你的名字时都克隆了你:) C++ 中的引用——在这方面——就像一个人的名字。