3 回答
TA贡献1799条经验 获得超6个赞
共有所有权:shared_ptrweak_ptrweak_ptrshared_ptr
shared_arrayshared_ptr<std::vector<T> const>.
intrusive_ptr
独特所有权:scoped_ptrstd::unique_ptrboost::scoped_ptrboost::scoped_ptr
scoped_arraystd::unique_ptr<T[]>delete[]deletedefault_deletestd::unique_ptr<T[]>operator[]operator*operator->.
std::auto_ptr§D.10 [depr.auto.ptr]
类模板 auto_ptr不受欢迎。[ 注:类模板 unique_ptr(20.7.1)提供了一个更好的解决方案。 -尾注 ]
无所有权:
shared_ptrweak_ptrshared_ptrlockshared_ptrexpiredexpired
if(!wptr.expired()) something_assuming_the_resource_is_still_alive();
TA贡献1829条经验 获得超7个赞
PersonHouse
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...};nullptrstd::unique_ptr.
struct ListNode{
std::shared_ptr<ListNode> m_next;
std::weak_ptr<ListNode> m_prev;};shared_ptrweak_ptr
- 3 回答
- 0 关注
- 567 浏览
添加回答
举报
