0

我是 C++ 的新手。我在我的代码中遇到了 std::unique_ptr 和 std::shared_ptr 的用法

typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;

我有两个问题:

  1. unique_ptr使用和使用有什么好处shared_ptr
  2. 它们之间的主要区别是什么?

可能一个例子会很有帮助!

4

2 回答 2

7

它们适用于 2 个完全不同的用例。

  1. std::unique_ptr保留对象的唯一所有权并在 unique_ptr 超出范围时销毁该对象。没有两个unique_ptr实例可以管理同一个对象。(http://en.cppreference.com/w/cpp/memory/unique_ptr

  2. std::shared_ptr保留对象的共享所有权。多个shared_ptr对象可能拥有同一个对象。当最后一个shared_ptr拥有该对象的人被销毁或最后一个shared_ptr拥有该对象的人通过operator=or分配另一个指针时,该对象被销毁并释放其内存reset()。(http://en.cppreference.com/w/cpp/memory/shared_ptr

强制执行唯一所有权std::unique_ptr是不可转让和不可复制的。这意味着您必须对其使用移动语义。

如果您unique_ptr在代码中看到某处,这意味着看,这里是指针,我们拥有它!. 这不能说shared_ptr,所有权可以分散在代码周围。

于 2013-08-21T14:42:07.450 回答