ブースト::コピー不可能な実装



Boost Noncopyable Implementation



最近読んだmuduoネットワークライブラリ、muduoは開発を行うためのブーストライブラリに基づいています。コピー不可能なクラスから継承されたクラスがたくさんあります。コピー不可能なクラスの実現を簡単に確認できます。

コピー不可能な集団訴訟

デフォルトでは、クラスがコピーコンストラクターとコピーコンストラクターを宣言していない場合、コンパイラーはクラスの暗黙的なパブリックコピーコンストラクターマシンコピーコンストラクターを自動的に作成します。
ただし、保護されていると宣言されているコピー不可能なクラスコンストラクタとデストラクタ、プライベートとして宣言されているコピーコンストラクタとコピーコンストラクタを実現し、削除することです。
つまり、独自のサブクラスで定義されたコピーコンストラクターまたはコピーコンストラクターに加えて、外部の呼び出し元は、コピーコンストラクターまたはコピーコンストラクターによって新しいサブクラスオブジェクトを作成することはできません。



コピー不可能な実装

class noncopyable { private: noncopyable(const noncopyable &) = delete void operator=(const noncopyable &) = delete protected: noncopyable() = default ~noncopyable() = default } //example class Test : public noncopyable { public: Test(){} ~Test(){} } // Test realized through inheritance from noncopyable can not copy constructor and copy constructor int main(){ Test t1 //ok //Test t2(t1) error! class noncopyable has a deleted copy constructor //Test t3 = t1 error! ... }