5

移動はできるがコピーはできないクラスを設計する場合、コピーコンストラクターをプライベートとして宣言するのは自然なことです。インスタンスメンバーとして移動可能で自明にコピー可能なオブジェクトのみを持つ場合、コンパイラが暗黙的にmoveコンストラクタを生成できるようにすることは理にかなっています。

ただし、VS11とG ++ 4.7の両方をサポートしている場合、互換性がないことがわかりました。

  • VS11には、明示的に定義された移動コンストラクターが必要です
  • G ++では、明示的な移動コンストラクターに、一致するパブリックコピーコンストラクターまたはnoexceptキーワードのいずれかが必要です。
  • VS11はnoexceptキーワードをサポートしていません。

ご覧のとおり、これは私を少し漬け物にします。私のクラスはコピーしてはいけません。VS11とMinGW/GCCの両方をサポートする必要があります。クラスを移動できるようにする必要があります。

私は何かを誤解しましたか、それともこの小さな問題を回避する方法はありますか?コピーコンストラクターの呼び出しが生成された場合、コンパイルを失敗させることはできますか?この問題に対するより良い解決策はありますか?

4

1 に答える 1

4

これをソースファイルに追加すると

#ifdef _MSC_VER
#define noexcept
#endif

GCCで定義することはできますnoexceptが、VC++はを無視しnoexceptます。

于 2012-10-19T13:02:19.127 に答える