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++ 中的引用——在这方面——就像一个人的名字。
我刚刚发现一个 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++ 中的引用——在这方面——就像一个人的名字。