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

时间:2013-08-21 14:38:49

标签: c++ c++11

我是c ++的新手。我在我的代码

中遇到了std :: unique_ptr和std :: shared_ptr的用法
typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;

我有两个问题:

  1. 使用unique_ptrshared_ptr
  2. 的好处是什么?
  3. 他们之间的主要区别是什么?
  4. 可能一个例子会有所帮助!

2 个答案:

答案 0 :(得分: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

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

    如果您在代码中的某处看到unique_ptr,则表示看,这是指针,我们拥有它!。关于shared_ptr,不能说所有权都可以分散在代码周围。

答案 1 :(得分:3)