綿密な学習C ++関連のスマートポインタ

C ++ =============================== -------------
alignasバイトアライメント、最小単位、整列させる   
;(1)構造体alignas {S}
可変型見つけるために型ID().nameの()の
値は、コンパイル中に直接見出すであろう直接かどうかを確認することができ、constexprの機能は以前に定義され
INTファクトconstexprの(N-INT)-N- {リターン<1 1:?(N-FACT *(N - 1));}
構造体ダブルX {A}
decltype(A-> X)Y;等オート
decltype((A - > x))をY、ダブル・ブラケット括弧差を有するとせずに参照することです

テンプレート<型名T、型名U>
自動追加(T、UのB) - > decltype(+ b)は、{
  + bを返します。
}

追加(1,2)整数
デフォルト1.0して追加する(1.0,2)倍精度、倍精度

列挙クラスnewcolorは{赤、緑= 20、青}。
NewClor R == newcolorは::ブルー。

int型= static_castを<整数>(R); //明示的に、コンパイラに伝えるのでsubconversion

static_assertでのみ確認され、コンパイル時に
アサートランタイムをチェックします

static_castは、あなたがこれを好きする必要があることをコンパイラに指示します

thread_local使用マルチスレッディング

<CStringの、int型=マップを使用して <int型、CStringの>;> 同等マップのtypedefを、
揮発性および最適化ステートメントません

クラスRuleOfThree {
   パブリック:
   CHAR * szBuf。
   プライベート:
   RuleOfThree 
}

右辺値参照
INT A = 0
INT&E = A;操作E、A *に相当する
。INT && E = 5;はなく、この変更はint&Eなど= 5;
 オートD = STD ::移動(B)、右に左値ターン値
 
ベースは、* P =由来新)(新;
由来* PD1 = static_castを<由来*>(P)
のdynamic_castの派生* PD2 = <由来*>(P); //スイッチベースクラスの派生クラスは問題ありませんが、以下の基であります派生クラスへのクラスは、問題になりますので、dynamic_castを使用するための理由は、変換が失敗した場合、それはNULLを返します。

* = P新たな新たな基地ベースと、
派生PD3 = static_castを* <*派生>(P)
のdynamic_castの派生* = PD4 <派生*>(P);
 
 デストラクタ珍しいことではない、そうでなければそこにダンプするので、コンパイラはデフォルト異常でない
 
 
 構造体ベース{
   仮想ボイドF(){:: COUT << STD "基地\ N-";}
   仮想基地〜(){}
 };
 導出ストラクト:基地{
    ボイドFを(){オーバーライド 
       -イルリライタブル関数Fキーワードクラスオーバーライド
     }
   }。

   
 std::shared_ptr  智能指针
 auto_ptr
 shared_ptr

================================================== =========== weak_ptrを====================================== ==========
 クラスの親。
typedefでのstd :: shared_ptrの<親> ParentPtr。
typedefでのstd :: weak_ptrを<親> WeakParentPtr。

chlidクラス:公共STD :: enable_shared_from_this、<chlid>
    //、原理はその後、Weakptr.lockこれによって構築されたテンプレートパラメータの曖昧定義
{
パブリック:
    WeakParentPtr父を、
    chlid();
    〜chlid();
    無効checkRelation();
} ;

typedefでのstd :: shared_ptrの<chlid> ChildPtr。
typedefでのstd :: weak_ptrを<chlid> WeakChildPtr。

クラスの親:公共のstd :: enable_shared_from_this <親>
{
パブリック:
    WeakChildPtrの息子。
    親();
    〜親();
    空checkRelation();
}。
chlid :: chlid(){のstd :: COUT << "子で\ n"。}
親::親()<< "\ N fahterにおいて" {STD :: COUT。}
chlid ::〜chlid(){のstd :: COUT << "BYE子\ n"。}
親::〜親(){のstd :: COUT << "BYE fahter \ n"; }

ボイドhandleChildandParent(CONST ParentPtr&P、ChildPtr&C CONST)
{
    オートCP = C-> father.lock();
    自動PC = P-> son.lock();
    (CP == P && PC == c)の場合
    {
        のstd :: COUT << "権利関係する\ n"。

    }
    他
    {
        STD :: COUT << "OOP !!!!!! \ n";

    }
}

ボイドchlid :: checkRelation(){
    オートPS = father.lock()。
    IF(PS)
    {
        handleChildandParent(PS、shared_from_this())。

    }
}
ボイド親:: checkRelation(){
    オートPS = son.lock()。
    IF(PS)
    {
        handleChildandParent(shared_from_this()、PS)。

    }
}
 
 
 
 
========================================= unique_ptrを====== ==========================================

ボイドtrasnsfer(uniquePtr OBJ)
{
  のstd :: COUT << OBJ> - > ID()<<はstd :: ENDL。
}

特徴:参照のみ;
 クラスの親、
unique_ptrをSTDのtypedef :: <オブジェクト> uniquePtr。

uniquePtrのObj(新しいオブジェクト(1));
オートP = Obj.get()
IF(P){のstd :: COUT << P-> ID()はstd :: ENDL。}

P = Obj.release()。
削除のp;

Obj.reset(); //ポインタを解放?
Obj.reset(新しい新しいオブジェクト(2))。

trasnsfer(STD ::移動(OBJの)); //他の人への参照は、その後、彼の値はnullptrする必要があります場合。
 

リリース元の4件の記事 ウォンの賞賛0 ビュー32

おすすめ

転載: blog.csdn.net/u010665493/article/details/104387556