【问题标题】:Difference between std::unique_ptr and std::shared_ptr in c++ [duplicate]c ++中std :: unique_ptr和std :: shared_ptr之间的区别[重复]
【发布时间】:2013-08-24 00:03:51
【问题描述】:

我是 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. 它们之间的主要区别是什么?

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

【问题讨论】:

  • 你试过谷歌吗?

标签: c++ c++11


【解决方案1】:

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

  1. std::unique_ptr 保留对象的 sole 所有权,并在 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,则表示看,这是指针,我们拥有它!。 shared_ptr 不能这样说,所有权可以分散在代码周围。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2013-06-04
    • 1970-01-01
    • 2011-06-21
    • 2014-04-29
    相关资源
    最近更新 更多