C ++ 11/14独特的指针不是那么独特?

时间:2017-05-04 13:40:00

标签: c++11 c++14 unique-ptr flawed-concept

我刚刚在一个情况下稳定了一个unique_pointer引用作为函数参数传递。所以我看一下它,发现代码实际上是在编译和运行。

为什么会这样? 当你可以引用那个指针时,指针是如何唯一的?

这是我的例子:

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;
}

2 个答案:

答案 0 :(得分:5)

  

当你可以引用那个指针时,指针是如何唯一的?

您可以根据需要添加对该指针的引用数量,但实际上只有一个引用。

删除&,以便您尝试复制unique_ptr,并且您的程序无法构建。您不允许克隆/复制指针,以便有多个指向同一个东西。这就是&#34;独特的&#34;装置

答案 1 :(得分:3)

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