問題タブ [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.
java - 将来の変更を隠すためのJavaリターンコピー
ArrayList
Javaで、オブジェクトの(または任意のコレクション)をラップするクラスがあるとします。
呼び出し元がArrayListで行われたオブジェクトへの将来の変更を確認できないように、これらのオブジェクトの1つをどのように返しますか?
つまり、オブジェクトのディープコピーを返したいが、それがクローン可能かどうかはわかりません。
language-agnostic - ディープコピーとシャローコピーの違いは何ですか?
ディープコピーとシャローコピーの違いは何ですか?
c# - (C#で)シリアライズ可能としてマークされていないオブジェクトのディープコピーを実行する方法は?
C# でクリップボード スタックを作成しようとしています。クリップボードのデータはSystem.Windows.Forms.DataObject
オブジェクトに保存されます。IDataObject
各クリップボード エントリ ( ) をジェネリック リストに直接保存したかったのです。ビットマップ (と思われる) の保存方法のため、リストに追加する前に、まずディープ コピーを実行する必要があると考えています。
バイナリ シリアライゼーション (以下を参照) を使用してディープ コピーを作成しようとしましたがSystem.Windows.Forms.DataObject
、シリアライズ可能としてマークされていないため、シリアライゼーション ステップは失敗します。何か案は?
c# - サイズを変更するために配列に対して浅いコピーを実行すると、どのような影響がありますか?
深いコピーと浅いコピーに関する私の理解が正しければ、私の質問は不可能です。配列 (a[10]) があり、浅いコピー (b[20]) を実行する場合、b のデータが連続していないため、これは不可能ではないでしょうか?
私がこれを完全に間違っている場合、配列のサイズを変更するために再割り当てを行うc ++の機能を(c#で)模倣する迅速な方法を誰かがアドバイスできます。
注
System.Array オブジェクトの .Clone() および .Copy() メンバーを見ています。
c++ - 手動メモリ管理とディープ コピーに関する初心者からの質問
大学の次のコースで C++ を使用する必要がありそうなので、初めて C++ を試してみます。私は数年間のプログラミング経験がありますが、ガベージ コレクションのない世界ではあまり経験がありません。
双方向リンク リストで使用するノードというクラスがあります。したがって、基本的には、値と他のノードへの 2 つのポインターがあります。メイン コンストラクタは次のようになりNode(const std::string & val, Node * prev, Node * next)
ます。この演習には、別のノードの浅いコピーを行うコピー コンストラクターが含まれており、その上に、それを変更して深いコピーを作成するように指示するコメントが付いています。
これが私が意味すると思ったものは次のとおりです。
これにより、コピーしたノードを変更しても新しいノードに影響を与えないようにするという目標が達成されたようです。ただし、このようにすると、ヒープに新しいものが割り当てられます。これは、ノードのデストラクタでも削除する必要があることを意味すると思うので、心配です。しかし、これは、ノードへのポインターが渡されるだけで、既に何かを指している他のコンストラクターと矛盾しています。それが起こっていると、私は正しくデストラクタに行くことができませんdelete
よね?next
prev
私は本当に混乱しています、ガイダンスに感謝します!
編集:要求されたコードは次のとおりです(上記の変更前)。
objective-c - NSArrayのディープコピー
ディープコピーを可能にする組み込み関数はありますNSMutableArray
か?
私は周りを見回しました、何人かの人々は[aMutableArray copyWithZone:nil]
深いコピーとして働くと言います。でもやってみたら浅いコピーのようです。
現在、for
ループを使用して手動でコピーを実行しています。
しかし、私はよりクリーンで簡潔な解決策が欲しいのです。
c# - ディープ コピー System.Windows.Forms.WebBrowser オブジェクト/復元状態
基本的に、私がやりたいことは、投稿されたデータを維持しながら、「新しいタブで開く」または「新しいウィンドウで開く」アクションと同等の操作を実行できるように、WebBrowser オブジェクトをコピーすることです。元の WebBrowser オブジェクトと同じ URL に移動したいだけではなく、HttpWebRequest を繰り返したいのです。これは可能ですか?どのように?
c# - キャッシュされたオブジェクトの効率的な複製
データ オブジェクトの比較を実行して、オブジェクトの 1 つのバージョンが別のバージョンと異なるかどうかを判断するアプリケーションがあります。私たちのアプリケーションは、これらのオブジェクトの大規模なキャッシュも行いますが、これらの比較を行う際にパフォーマンスの問題が発生しました。
ワークフローは次のとおりです。
- データ項目 1 は、メモリ内の現在の項目です。このアイテムは最初にキャッシュから取得され、ディープ クローンが作成されました (辞書などのすべてのサブ オブジェクト)。次に、データ項目 1 が編集され、そのプロパティが変更されます。
- 次に、このオブジェクトをキャッシュに保存された元のバージョンと比較します。データ項目 1 が複製され、そのプロパティが変更されたため、これらのオブジェクトは異なるはずです。
ここにはいくつかの問題があります。
主な問題は、ディープ クローン メソッドが非常にコストがかかることです。浅いクローンに対してプロファイリングしたところ、10 倍遅くなりました。それはがらくたです。ディープクローンを作成する方法は次のとおりです。
最初は以下を使用してクローンを作成していました。
これはパフォーマンスが向上しましたが、浅い複製を行うため、辞書など、このオブジェクトのプロパティであったすべての複雑なオブジェクトは複製されませんでした。オブジェクトには、キャッシュ内にあったオブジェクトと同じ参照が含まれているため、比較するとプロパティは同じになります。
では、オブジェクト グラフ全体のクローン作成をカバーする C# オブジェクトのディープ クローン作成を効率的に行う方法はありますか?