3 回答
TA贡献1799条经验 获得超6个赞
共有所有权:shared_ptr
weak_ptr
weak_ptr
shared_ptr
shared_array
shared_ptr<std::vector<T> const>
.
intrusive_ptr
独特所有权:scoped_ptr
std::unique_ptr
boost::scoped_ptr
boost::scoped_ptr
scoped_array
std::unique_ptr<T[]>
delete[]
delete
default_delete
std::unique_ptr<T[]>
operator[]
operator*
operator->
.
std::auto_ptr
§D.10 [depr.auto.ptr]
类模板 auto_ptr
不受欢迎。[ 注:类模板 unique_ptr
(20.7.1)提供了一个更好的解决方案。 -尾注 ]
无所有权:
shared_ptr
weak_ptr
shared_ptr
lock
shared_ptr
expired
expired
if(!wptr.expired()) something_assuming_the_resource_is_still_alive();
TA贡献1829条经验 获得超7个赞
Person
House
std::unique_ptr<T>
.
std::shared_ptr<T>
.std::shared_ptr<T>
std::weak_ptr<T>
T*
T&
.
如果您有一个自定义删除器(例如,您使用分配池),那么这将导致每个指针的开销,这很容易通过手动删除来避免。 std::shared_ptr
具有复制上的引用计数增量的开销,加上销毁时的减少,然后进行0计数检查并删除所保存的对象。根据实现的不同,这会使您的代码膨胀并导致性能问题。 编译时间。与所有模板一样,智能指针对编译时间有负面贡献。
struct BinaryTree{ Tree* m_parent; std::unique_ptr<BinaryTree> m_children[2]; // or use std::array...};
nullptr
std::unique_ptr
.
struct ListNode{ std::shared_ptr<ListNode> m_next; std::weak_ptr<ListNode> m_prev;};
shared_ptr
weak_ptr
- 3 回答
- 0 关注
- 489 浏览
添加回答
举报