c++新特性11 (10)shared_ptr七reset

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++新特性11 (10)shared_ptr七reset相关的知识,希望对你有一定的参考价值。

1. 使用场景

p.reset() 若p是唯一指向其对象的shared_ptr,reset会释放此对象。
p.reset(q) 释放原有对象的同时,若传递了可选的内置参数指针q,会令p指向q,否则会将p置为空
p.reset(q,d) 若还传递了参数d,将会调用d而不是delete来释放q

1.1 reset函数定义

    void reset() noexcept  // release resource and convert to empty shared_ptr object
        shared_ptr().swap(*this);
    

    template <class _Ux>
    void reset(_Ux* _Px)  // release, take ownership of _Px
        shared_ptr(_Px).swap(*this);
    

    template <class _Ux, class _Dx>
    void reset(_Ux* _Px, _Dx _Dt)  // release, take ownership of _Px, with deleter _Dt
        shared_ptr(_Px, _Dt).swap(*this);
    

    template <class _Ux, class _Dx, class _Alloc>
    void reset(_Ux* _Px, _Dx _Dt, _Alloc _Ax)  // release, take ownership of _Px, with deleter _Dt, allocator _Ax
        shared_ptr(_Px, _Dt, _Ax).swap(*this);
    

1.2 swap函数定义

    void swap(shared_ptr& _Other) noexcept 
        this->_Swap(_Other);
    

以上是关于c++新特性11 (10)shared_ptr七reset的主要内容,如果未能解决你的问题,请参考以下文章

c++新特性11 (10)shared_ptr八”shared_ptr类“

c++新特性11 (10)shared_ptr三”创建计数器“

c++新特性11 (10)shared_ptr四”_Ptr_base 类“

c++新特性11 (10)shared_ptr五”构造函数“

c++新特性11 (10)shared_ptr二”_Ref_count_base类“

c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“