スマートポインタの単純な実装

テンプレート< クラス T>
 クラスSpの{
 パブリック
    SP(T * PTR = nullptr):ptr_(PTR)、count_(新しいsize_tの){
         場合(PTR){
             * count_ = 1 
        } {
             * count_ = 0 
        } 
    } 

    SP(CONST Spのおよび他の){ 
        ptr_ = other.ptr_。
        count_ = other.count_。 ++ * _カウント)
    } 

    Spの演算子=(CONST Spの&SRC){
         場合(ptr_ == src.ptr_){
             返す * この
        } 
        ReleaseCount()。
        ptr_ = src.ptr_。
        count_ = src.count_。 ++ * _カウント)返す * これを
    } 

    size_tのはuse_count(){ 
        戻り *のcount_。
    } 

    T演算子 * (){
         場合(ptr_)
        { 
            リターン* ptr_; 
        } 
    } 

    のT *の演算子 - > (){
         場合(ptr_)
        { 
            戻りptr_。
        } 
    } 

    演算子 ブール()のconst {
         戻り ptr_ =!nullptr。
    }

    SP(){ 
        ReleaseCount()。
    } 

プライベート無効ReleaseCount(){
         場合(ptr_){  *カウント_) - もし(* count_の== 0 ){
                ptr_を削除します。
                count_を削除します。
            } 
        } 
    } 

    T * ptr_ {nullptr}。
    size_tの * count_ {nullptr}。
}。

クラスベース
{ 
パブリック
    ベース(){ 
        のprintf(" CONする\ n " ); 
    }
    ベース(){ 
        のprintf(" ディーコンする\ n " ); 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/zuofaqi/p/11441275.html