コンストラクタ関連バグの防止
コンストラクタ関連のバグを減らす方法
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:
}; |

コメントを投稿