我是c ++的新手。我在我的代码
中遇到了std :: unique_ptr和std :: shared_ptr的用法typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;
我有两个问题:
unique_ptr
和shared_ptr
可能一个例子会有所帮助!
答案 0 :(得分:7)
它们用于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=
或reset()
分配另一个指针时,该对象将被销毁并释放其内存。 (http://en.cppreference.com/w/cpp/memory/shared_ptr)
强制执行唯一所有权std::unique_ptr
是不可转让且不可复制的。这意味着你必须使用移动语义。
如果您在代码中的某处看到unique_ptr
,则表示看,这是指针,我们拥有它!。关于shared_ptr
,不能说所有权都可以分散在代码周围。
答案 1 :(得分:3)
std::unique_ptr
:
std::shared_ptr
: