我刚刚在一个情况下稳定了一个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;
}
答案 0 :(得分:5)
当你可以引用那个指针时,指针是如何唯一的?
您可以根据需要添加对该指针的引用数量,但实际上只有一个引用。
删除&
,以便您尝试复制unique_ptr
,并且您的程序无法构建。您不允许克隆/复制指针,以便有多个指向同一个东西。这就是&#34;独特的&#34;装置
答案 1 :(得分:3)
引用不会创建指针的新实例。仅仅因为你可以引用指针并不意味着它不是唯一的。我可以通过名字来引用你,这并不意味着我每次使用你的名字时都克隆了你.C ++中的引用是 - 在这方面 - 就像一个人的名字。