5

オブジェクト全体を背後にコピーする方法boost::shared_ptr<T>: memcopy オプション (メモリ クローンを作成するだけ) はありますか、それともコピー コンストラクターを作成しますか?

4

3 に答える 3

1

operator=ディープ コピーを実行するコピー コンストラクターまたは が必要です。

boost::shared_ptrこれを行うためにオブジェクトの構造を知ることはできません。「メモリクローン」操作もできません。

もちろん、これは、明示的に定義されたコピー コンストラクターを必要とするオブジェクトのみに適用されoperator=、「単純な」ものは浅いコピーを作成します。

于 2013-03-21T11:26:24.377 に答える
1

オブジェクトの正確な型がわかっている場合は、コピー コンストラクターまたはコピー代入演算子を使用する必要があります。

オブジェクトが継承階層内のクラスのインスタンスであり、オブジェクトの正確なタイプがわからない場合は、仮想クローン機能を使用する必要があります。

于 2013-03-21T11:29:27.930 に答える
0

コピー コンストラクターを作成し、次のように記述します。

ptr.reset(new T);
*ptr  = *(otherObject.ptr);

ポインターをディープコピーするため。

于 2013-03-21T11:25:55.237 に答える