Codelogy

コンストラクタ関連バグの防止

コンストラクタ関連のバグを減らす方法

1. コンストラクタ呼び出しの禁止

自分でクラスを定義する際、そのオブジェクトのコピーを禁止したいことがしばしばありますが、 「コピーコンストラクタ, 代入演算子 = を定義しない」という方法では、これらの関数がコンパイラによって自動的に生成されてしまって上手くいきません。
オブジェクトのコピーを禁止するには、「何もしない」コピーコンストラクタと代入演算子を private なメンバとして自分で定義する必要があります。

Test.h
//オブジェクトのコピーをさせないクラス
class Test {
public:

    //construction
    Test();

private:

    //construction
    Test(const Test&);

    //opeator
    Test& operator = (const Test&);

};
Test.cpp
//デフォルトコンストラクタ
Test::Test(){
}

//コピーコンストラクタ [forbidden to be used]
Test::Test(const Test& t){
}

//代入演算子 [forbidden to be used]
Test& Test::opertor = (const Test& t){
    return *this;
}

このようにすれば、オブジェクトのコピーを行うコードをコンパイル時にエラーとして検出することができます。

int main(){

    Text x;

    Text y =x;  //Error

    Test z;
    z =x;       //Error

    return 0:
};

コメントを投稿

コメントの公開は承認制のため、投稿から掲載までに時間がかかることがあります。


About

2007年05月16日 17:24 に投稿されたエントリです。

他にも多くのエントリがあります。
メインページアーカイブページもご覧ください。