効率的なC ++:コンストラクタ/デストラクタ/割り当て

C ++のデフォルトの関数呼び出しを学び、提供

  • コンパイラが自動的に空の各クラスのコンストラクタ、コピーコンストラクタ、代入演算子、およびデストラクタを作成します。
  • 自動的にこれを防ぐために作成した関数のコンパイラを使用しないでください、あなたはこれらの機能を書かれています

あなたが機能自動的に生成されたコンパイラを使用したくない場合は、明示的に拒否します

  • コンパイラはプログラマに利便性をもたらすことができず、特定の状況で導入されたバグを見つけるのが難しくなりますので、明示的に拒否しなければならないだけでなく、デフォルトの機能を提供します
  • 拒否の方法は明らかに機能がプライベートであることを述べることで、関数の本体を提供していません。
    • 予期しない状況で外部コールを防ぐために、民間の明示権限の制御
    • 関数本体を提供していない、それが連結された場合、明らかにあなたが機能に注意を払う示唆コンパイラエラーをさせることです
クラスコピー不可能{
 プライベート
    コピー不可能な(CONSTコピー不可能&); 
    コピー不可能演算子 =(CONSTコピー不可能&); 
} 
// 基底クラスとしては、継承します

多型基底クラスの仮想デストラクタの宣言

  • クラスが仮想関数を有する場合、それは(例えば、デストラクタは、下から上の順に行われる)、主にリソースの漏洩を防止するために、デストラクタシェンMingcheng仮想関数でなければなりません
  • クラスは、マルチ状態に関与していない場合は、必要に仮想関数のリストを使用しているため、その後、高効率が通常の関数ではない呼び出す、仮想関数、仮想関数呼び出しを宣言しません
  • あなたは、クラスがインスタンス化されたくない場合は、そのクラスの仮想関数は純粋仮想関数を宣言し、その実装を提供しています
クラスAbstractClass 
{ 
パブリック仮想AbstractClass(); 
} 

AbstractClass ::AbstractClass()
{ 
    // 機能実装
     // オブジェクトがリソースの解放です 
}

 

デストラクタの異常解消

  • デストラクタは、リソースの問題の一部の解放につながる異常を吐くことはありません、デストラクタの例外処理が試みなければならない...キャッチ
  • 顧客がアクションに反応する必要があり、投げる可能性がある場合、あなたは、この設計の利点を操作を実行するための一般的な機能を提供する必要があります。
    • ユーザーが異常で、合理的な取引をする機会をできるように、顧客に共通の機能を提供し、明確な例外がスローされます
    • デストラクタリソース解放状態チェック、最終処理
クラスDBConn 
{ 
プライベート
    するDBConnect DBC; 
    BOOL クローズ;
 公共無効閉じる()
    { 
        dbc.close(); 
        クローズドが = trueに; 
    }
    
    DBConn()
    { 
        IF(!休館)
        { 
            試み
            { 
                dbc.close(); 
            } キャッチ(...){
                 // 停止又は記録
            } 
        } 
    }   
} 
// RAN異常を解決近いとすることができます

コンストラクタとデストラクタで仮想関数を呼び出しません

  • コンストラクタとデストラクタは仮想関数呼び出しではなく、説明を参照してください。デストラクタ自体が仮想関数を設計することができ、いくつかのケースでは、仮想関数に設計する必要があります
  • コンストラクタが実行を完了していない前に、クラスのvtableが確立されていません
  • デストラクタに入る前に、クラスのvtableが破壊されている、コールすることはできません。

オペレータが= *このへの参照を返すしてみましょう

利点:連続評価を容易にするために、このような実装の何か:

= B = CをD = // 連続割り当てを
クラスウィジェット
{ 
パブリック
    ウィジェット演算子 + =(constのウィジェット&RHS)
    { 
        返す * この
    } 
}

 

おすすめ

転載: www.cnblogs.com/chusiyong/p/11448264.html