0

boost::noncopyable(その目的のために明示的に設計された を使用できないと仮定します)

(C++11が使えないと仮定)

クラスをコピー不可にすると、通常、次の構文が表示されます。

class MyClass
{
public:
    ...
    stuff
    ...

private:
    MyClass(const MyClass&); // disables the copy constructor
    MyClass& operator=(const MyClass&); // disables the copy assignment operator
};

この構文は長ったらしく見えます。代わりに以下を使用できると思います。

    MyClass(MyClass&); // disables the copy constructor
    void operator=(MyClass); // disables the copy assignment operator

これはより短いように見えます (クラスの名前を 4 回ではなく 3 回だけ繰り返します。また、 and も省略const&ます)。

私の構文は他の構文とまったく同じことをしますか?

どちらかを優先する理由はありますか?

4

1 に答える 1

0

ソースコードを数語短くすることを強調するのはあまり良くありません。その上、あなたはあなたのoperator=判読不能を作っています、それはもはやコピーオペレーターではありません...
いくつかの単語を節約するためだけに後者の使用を控えるべきです.

ここに投稿があります。

//見積もり

class MyClass
{
private:
    MyClass(const MyClass&) {}
    MyClass& operator=(const MyClass&) {}
};

あなたが C++ の入門テキストを読んだことがある C++ プログラマーであるが、慣用的な C++ にほとんど触れていない (つまり、多くの C++ プログラマー) 場合、これは... 混乱を招きます。コピー コンストラクターとコピー代入演算子を宣言しますが、それらは空です。では、なぜそれらを宣言するのでしょうか。はい、それらは非公開ですが、それはさらに疑問を投げかけるだけです:なぜそれらを非公開にするのですか?

これがコピーを妨げる理由を理解するには、それらを非公開と宣言することで、非メンバー/友人がコピーできないようにすることを理解する必要があります. これは、初心者にはすぐにはわかりません。また、コピーしようとしたときに表示されるエラー メッセージもありません。

//引用終了

于 2013-04-09T20:22:07.407 に答える