c ++中std :: unique_ptr和std :: shared_ptr之间的区别

Sat*_*evi 0 c++ c++11

我是c ++的新手.我在我的代码中遇到过std :: unique_ptr和std :: shared_ptr的用法

typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

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

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

Ser*_* K. 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=或被分配另一个指针时,该对象被销毁并且其内存被释放reset().(http://en.cppreference.com/w/cpp/memory/shared_ptr)

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

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