我是 C++ 的新手。我在我的代码中遇到了 std::unique_ptr 和 std::shared_ptr 的用法
typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;
我有两个问题:
unique_ptr
使用和使用有什么好处shared_ptr
- 它们之间的主要区别是什么?
可能一个例子会很有帮助!
它们适用于 2 个完全不同的用例。
std::unique_ptr
保留对象的唯一所有权并在 unique_ptr 超出范围时销毁该对象。没有两个unique_ptr
实例可以管理同一个对象。(http://en.cppreference.com/w/cpp/memory/unique_ptr)
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
,所有权可以分散在代码周围。
std::unique_ptr
:
std::unique_ptr 是一个智能指针,它通过指针保留对象的唯一所有权,并在 unique_ptr 超出范围时销毁该对象。没有两个 unique_ptr 实例可以管理同一个对象。
std::shared_ptr
:
std::shared_ptr 是一个智能指针,它通过指针保留对象的共享所有权。几个 shared_ptr 对象可能拥有同一个对象。