2017-07-26 9 views
1

This questionは、ポインタ(この場合はスマートポインタ型)のディープコピーをうまく処理し、this questionはforループを持つコンテナのディープコピーを扱います。ポインタのコンテナを、すべての要素を明白に反復せずに深くコピーすることはできますか?

明示的にすべての要素を反復処理せずにコンテナの完全コピーを実行する方法はありますか?例えば

、あなたはstd::vector<std::shared_ptr<MyObj>> originalを持っていて、新しいstd::vector<std::shared_ptr<MyObj>> copiedoriginalからMyObjの各要素のコピーへのポインタを含むように各ポインタを複製、コンテナ全体をコピーしたい場合。

+1

あなたはヒープ上に 'N'新しいオブジェクトを割り当てる必要があります。何かどこかで、 'new''N''回を呼び出さなければなりません。 –

+0

@IgorTandetnik:それは理にかなっています。私はそのように考えなかった。 – marcman

+0

多相型を指しているときに 'shared_ptr'のディープコピーを自動的に作成する方法はありません。 – Slava

答えて

0

確かに、foreach、ファンクタ、および仮想クローンメソッドを使用します。私はそれに掘っ前 しかし、私はすでに、より近代的な方法(あなたがラムダを使用することができると仮定)で質問に答えた人を見つけた: vector deep copy using a functor or lambda

関連する問題