問題タブ [deep-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
1579 参照

c++ - 保守しやすいコピー コンストラクターの作成

次のクラスを検討してください。

"p" のディープ コピーを行うには、コピー コンストラクターを定義する必要があることに注意してください。これには 2 つの問題があります。

  1. ほとんどのフィールドは単純にコピーする必要があります。それらを 1 つずつコピーするのは見苦しく、エラーが発生しやすくなります。

  2. さらに重要なことに、新しい属性がクラスに追加されるたびに、コピー コンストラクターを更新する必要があり、メンテナンスの悪夢が生まれます。

私は個人的に次のようなことをしたいと思っています:

したがって、デフォルトのコピー コンストラクターが最初に呼び出され、次にディープ コピーが実行されます。
残念ながら、これはうまくいかないようです。

これを行うより良い方法はありますか?1 つの制限 - 共有/スマート ポインターを使用できません。


Sbi の提案は非常に理にかなっています。リソースを処理するためのラッパー クラスを作成すると思います。ブースト ライブラリはすべてのプラットフォームで利用できるとは限らないため、shared_ptr を使用したくありません (少なくとも標準ディストリビューションでは利用できません。OpenSolaris はその例です)。

何らかの方法でコンパイラにデフォルトのコンストラクタ/代入演算子を作成させ、その上に機能を追加することができれば素晴らしいと思います。手動で作成されたコピー コンストラクター/代入演算子関数は、作成するのが面倒で、維持するのは悪夢だと思います。したがって、私の個人的な経験則は、カスタム コピー コンストラクター/代入演算子を絶対に避けることです。

皆さんの回答と役立つ情報に感謝し、私の質問のタイプミスについて申し訳ありません. 携帯から入力していました。

0 投票する
2 に答える
1160 参照

python - ディープコピーに問題がありますか?

ソース

出力

質問

なぜそれを出力するのですか?エラーリストを変更する前に複製したのですが、両方が同じリストを参照するべきではないと思いましたか?

0 投票する
2 に答える
1908 参照

c# - NHibernateオブジェクトのディープコピーを行う方法は?

NHibernateオブジェクト(プロキシラッパー)のディープコピーを実行しようとしています。Id親オブジェクトの各内部オブジェクトを除いて、遅延ロードされたもののコピーも実行したいと思います。これは、ディープコピーの結果である新しいオブジェクトを保存するときに生成されるためです。

私はシリアル化を使用しようとしましたが、AutoMapperも使用してみました(これは意図されたものではないので、試してみました)。どちらも私が望むものを生み出しませんでした。

これ以上の方法がない場合は、最後のオプションとして、すべてのプロパティを手動でコピーすることを考えています。

私はこの質問を見つけましたが、手動でコピーするのは気が進まなかったので、私が望んでいたことには対応していませんでした。

0 投票する
2 に答える
5645 参照

java - ディープコピー [] と ArrayList Java

いくつかの Object[] と ArrayListのディープ コピーを作成したいのですが、どうすればそれを行うことができますか (ループせずに、クローンを呼び出さずに)

これを行うための標準ユーティリティはありませんか?

ありがとうジョアン

0 投票する
1 に答える
1258 参照

vb.net - 簡単な質問 - 浅いコピー (VB.Net)

わかりました、私はいつもこれについて混乱します。

このコードがあるとしましょう。

これは、「Foo」または「listOfFoo」に格納されているアイテムを参照すると、同じオブジェクトが参照されることを意味しますよね? 「foo」のプロパティを変更しても、新しいオブジェクトには変更しない場合、両方とも更新された値を参照して反映しますか?

0 投票する
4 に答える
2239 参照

language-agnostic - コピー コンストラクター/演算子/関数は、実装するコピー バリアントを明確にする必要がありますか?

昨日、C# でのオブジェクトのコピーについて質問しましたが、ほとんどの回答は、ディープ コピーシャロー コピーの違いと、特定のコピー コンストラクター (または演算子、または関数) が両方のコピー バリアントのどちらであるかを明確にする必要があるという事実に焦点を当てていました。実装します。これは奇妙だと思います。

私は、コピーに大きく依存する言語である C++ で多くのソフトウェアを作成しましたが、複数のコピー バリアントが必要になることはありませんでした。私がこれまでに使用した唯一の種類のコピー操作は、「十分な深さのコピー」と呼んでいるものです。次のことを行います。

  • オブジェクトがメンバー変数の所有権を持っている場合 ( compositionを参照)、再帰的にコピーされます。
  • オブジェクトがメンバー変数に対する所有権を持たない場合 ( aggregationを参照)、リンクのみがコピーされます。

さて、私の質問は 3 つあります。

  • 1) オブジェクトが複数のコピーバリアントを必要とすることはありますか?
  • 2) コピー関数は、それが実装するコピーバリアントを明確にする必要がありますか?
  • 3) 余談ですが、私が「十分に深いコピー」と呼んでいるものについて、より適切な用語はありますか? 「ディープコピー」という用語の定義について、関連する質問をしました。
0 投票する
2 に答える
320 参照

language-agnostic - ディープコピー操作は、所有していないサブ変数を再帰的にコピーしますか?

所有していない変数を持つオブジェクトがあるとします。つまり、変数は、 compositionではなくaggregationによって構成されます。ディープコピー操作は変数をコピーしますか、それとも変数へのリンクのみをコピーしますか?

0 投票する
6 に答える
35082 参照

java - Java の ByteBuffer のディープ コピー duplicate()

java.nio.ByteBuffer#duplicate()古いバッファの内容を共有する新しいバイト バッファを返します。古いバッファのコンテンツへの変更は新しいバッファに表示され、その逆も同様です。バイト バッファのディープ コピーが必要な場合はどうすればよいですか?

0 投票する
1 に答える
4542 参照

php - 教義記録のディープコピー

symfony プロジェクトでドクトリン レコードのディープ コピー/クローンを作成したいと考えています。既存の copy($deep) メソッドは $deep=true では正しく動作しません。

例として、教室でのレッスンを見てみましょう。このレッスンには開始日と終了日があり、その間にいくつかの休憩があります。この教室はビルの中にあります。

レッスンと休憩は 1 対多の関係であるため、多くの休憩がレッスン内にある可能性があります。レッスンと建物は多対 1 の関係であるため、レッスンは 1 つの建物にしか存在できません。

部屋のコピーを作成したい場合は、休憩もコピーする必要があります。建物は同じままである必要があります (ここにコピーはありません)。

sfDoctrineRecord から拡張して copy-method をオーバーライドする PHP クラスを作成する Web 上の例をいくつか見つけました。

私が試したのは:

これにより、失敗が発生します。Doctrine_Connection_Mysql_Exception: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-1' for key 'PRIMARY'

したがって、これは新しいレコードである必要があるため、新しいレコード ($ret) の ID を「null」にする必要があります。どこで、どのようにすればよいですか?

更新: エラーは次のコードで修正されています。

しかし、うまくいきません。DoctrineCollection レッスン -> ブレークでは、新しいブレークはすべて問題ありません。ただし、データベースには保存されません。レッスンをコピーして、その時間に 7 日間を追加したい:

ご覧のとおり、休憩は保存されていますが、データベースにはないようです。

0 投票する
1 に答える
2649 参照

python - カスタムクラスインスタンスのコピー

私はプログラミングとPythonに不慣れです。私が抱えている問題は、カスタムクラスのインスタンスであるリスト要素を削除することです。

これは次を返します:ValueError:list.remove(x):xはリストにありません

ディープコピーされたリストからの参照を使用してリストから要素を削除する簡単な方法はありますか?

編集:あなたの答えをありがとう。インデックスを使用して解決策を見つけました。それはきれいではありませんが、それは仕事をします: