場合によっては、C++ クラスのコピー コンストラクターを禁止して、クラスを「コピー不可」にする必要があります。もちろん、operator=
同時に禁止する必要があります。
これまで、これを行う方法は 2 つ見てきました。方法 1 は、メソッドをプライベートとして宣言し、実装を行わないことです。
class Class {
//useful stuff, then
private:
Class( const Class& ); //not implemented anywhere
void operator=( const Class& ); //not implemented anywhere
};
方法 2 は、メソッドをプライベートとして宣言し、それに「空の」実装を与えることです。
class Class {
//useful stuff, then
private:
Class( const Class& ) {}
void operator=( const Class& ) {}
};
私の意見としては、最初の方法の方が良いでしょう。予期しない理由でコピー コンストラクターが同じクラス メンバー関数から呼び出されたとしても、後でリンカー エラーが発生します。2 番目のケースでは、このシナリオは実行時まで気付かれません。
最初の方法には重大な欠点がありますか? 欠点があるとすれば、それよりも良い方法は何ですか? また、その理由は何ですか?
ベストアンサー1
最初の方が良い
さらに良いのはC++0x 'delete' キーワード:
class Class {
// useful stuff, then
public:
Class(const Class&) = delete;
void operator=(const Class&) = delete;
};