2011-01-01 3 views
5

C++ 0xでは、一部のクラスをコピーできますが、移動できないことは合法ですか?私はサイズ変更の異種クラスを実装することを検討しています。コピーが必要なクラスや移動が必要なクラスがあれば、それを処理できるかどうかはわかりません。コピーするが、移動しない

答えて

5

はい、それはコピー可能が、移動できないようにクラスのために法的です:

class MyClass { 
public: 
    /* Copyable... */ 
    MyClass(const MyClass&); 
    MyClass& operator= (const MyClass&); 

    /* ... but not movable. */ 
    MyClass(MyClass&&) = delete; 
    MyClass& operator= (MyClass&&) = delete; 
}; 

しかし、私は誰もがこれをしたいと思う理由として正当な理由を考えることはできません。 C++コーダー(私のような)を知っていても、これが起こるかもしれないと予想するべきだと思います。

好奇心を持たずに、クラスがコピー可能であっても移動できない場合、どのコードが壊れてしまうのですか?

+0

サイズが変わる異機種スタックです。私は最小限の努力でC++ 03との互換性を望むかと思いますが、私は両方を許すべきです。 – Puppy

+1

ええと...具体的には、コピー可能な、動かない(私はそれが合理的な用語だと思いますか?)オブジェクトで壊れているコードには何ですか?私は以前これを見たことがないので、私は興味があります。 – templatetypedef

+0

あなたが言ったことはいいことです。何らかの理由で、移動したオブジェクトが破壊される必要がないことを心に留めました。うわー。 – Puppy

0

移動コンストラクタをprotected/privateにすることは、そのクラスのオブジェクトを移動する能力を制限する方法であると確信しています。あなたはそれをテンプレートで期待できますか?私はそうは思わない。あなたはその種のチェックのためにstd::enable_ifが必要です。

関連する問題