【发布时间】:2019-09-30 19:17:16
【问题描述】:
我目前正在学习 C++ 中的 unique_ptr 和 shared_ptr 类型。智能指针相对于原始指针的优势是显而易见的,并且有很多解释为什么你应该更喜欢它们而不是原始指针。我很难理解的是为什么你会特别选择使用unique_ptr 而不是shared_ptr?
据我所知,从程序员的角度来看(忽略实现),unique_ptrjust 似乎是 shared_ptr 的特例版本,其中引用计数被限制为一个。因此,如果我创建了一个 shared_ptr 并且只创建了一个引用,那么我基本上就拥有了 unique_ptr 的实用性(将来可以使用 shared 部分)。
那么unique_ptr 能给你带来什么好处呢?我应该承认,我是作为一名 Java 程序员来处理这个问题的,shared_ptr 似乎非常接近 Java 的工作方式。
【问题讨论】:
-
它使用起来更便宜(或者,更确切地说,它禁止昂贵的使用)并且它使程序逻辑更清晰,更容易推理。总的来说,大多数情况下,在 C++ 程序中您不需要
shared_ptr,但极少例外。 -
unique_ptr的优势在于它与 Java 的工作方式相差甚远。unique_ptr不需要在一些隐式创建的共享状态对象中分配或更新引用计数器。 -
两者各有优缺点。这取决于您使用指针的上下文。
-
这里有很多答案。 stackoverflow.com/questions/6876751
-
shared_ptrs 确实接近 Java 的工作方式。它们也昂贵。
标签: c++ shared-ptr smart-pointers unique-ptr