effective C++ノートの条項27:暗黙的に生成された関数を使用したくない場合は表示的に禁止する

889 ワード

l今日がどんな日であろうと、習慣は堅持しなければならない.3月17日夜9時半からのまとめです.
l例えばクラステンプレートArrayでは,生成されたクラスは上下限検査が可能であるほか,C++標準配列と同様の挙動を示すが,標準配列では配列間付与は許されない.設計で直面する難題の1つは,Arrayオブジェクト間の付与操作をどのように禁止するかである.
l暗黙的に生成される関数の生成を禁止する2つのステップがあります.
  • は、operator=などのこの関数を宣言し、privateにします.地声明を表示すると、コンパイラが自動的にバージョンを生成することを防止し、privateにするとユーザーが呼び出すことを防止します.
  • はそれを実現しません.友元とメンバー関数の呼び出しを防止するために、それを実装しないでください.友元またはメンバー関数が何気なく呼び出されると、リンクが間違って報告されます.
  • template <class T>
    class Array
    {
    private:
    //        
    	Array& operator= (const Array& rhs);
    }
    
    
    

    l  
    この は、 コンパイラが に する (デフォルトコンストラクタ、コンストラクタ、コピーコンストラクタ、 オペレータ)に される. の では、 り てとコピー は の を し、ほとんどの 、それらの1つを したい 、もう1つを しなければならないことを します.