私は、コピーの作成とコピーの割り当てに深いコピーを実行する大きなオブジェクトを管理するコンテナを作りたいと思っています。デフォルトの生成された移動メンバーは何をしますか?
template <class TBigObject>
class Container : public std::vector< std::shared_ptr<TBigObject> >
{
public:
Container(int nToAllocate){ /* fill with default constructed TBigObjects */ }
Container(const Container& other){ /* deep copy */ }
Container(Container&&) = default;
Container& operator = (const Container& population){ /* deep copy */ }
Container& operator = (Container&&) = default;
};
私は、不履行が何を知りたいのです:
Container(Container&&) = default;
Container& operator = (Container&&) = default;
メンバーが実際に行います。
私が呼び出す場合:
Container<int> makeContainer()
{
...
}
とでデバッグブレークポイントを設定します。
Container<int> moveAssigned;
moveAssigned = makeContainer(); // EDIT corrected thanks to Andy Prowl
Container<int> moveConstructed(makeContainer());
とコピーコンストラクタと代入演算子の内側、デバッガはこれらのブレークポイントの上にジャンプします。実際にはデフォルトの移動メンバーはディープコピーを実行せず、すべてのサブオブジェクトを移動しているようです。
この動作は標準で保証されていますか?既定の移動メンバーは直感的に動作し、すべてのサブオブジェクトを移動しますか?
明示的に許可されていない限り、標準型から継承しません。 – bitmask
@bitmaskしかし、私は多態的な動作や複雑な機能を望んでいません。私は単純にディープコピー機能を追加したいだけです。これが私を苦しめることができる方法はありますか?この問題についていくつかのリソースをお持ちですか? –
私の場合は、私の場合、この質問は、http://stackoverflow.com/questions/4353203/thou-shalt-not-inherit-from-stdvector適用 –