3

このコンストラクターを作成しましたが、そのディープ コピーを作成する必要があります。ディープコピーの意味がよくわかりません。独自の動的メモリを持つオブジェクトの独立したコピーを作成することは知っていますが、これの必要性がわかりません。また、ディープコピーを実際に実装する方法もわかりません。助言がありますか?

ディープ コピーを作成する必要があるコンストラクタは次のとおりです。

template<class t_type>
inline ALIST<t_type>::ALIST()
{
  t_type value;
  capacity=10;  
  DB = new t_type[capacity];
  count=capacity;

  cout<<"Enter value: ";
  cin.clear();
  cin>>value;


  for(int i=0; i<capacity; i++)
  {
    DB[i]=value;
  }
}
4

3 に答える 3

4

コピーアンドスワップの慣用句とは何ですか?

オブジェクトが持つすべての情報をコピーし、オリジナルを変更せずにコピーを変更できるように、ディープ コピーが使用されます。大まかに言えば、浅いコピーはポインター自体のみをコピーしますが、それでも同じ情報を指します。注意しないと、データに予期しない変更が生じる可能性があります。

于 2012-05-20T21:35:02.390 に答える
3

特にStroustrupのプレゼンテーションスライド#14と#15をご覧ください

ディープコピー:ポインターとそれが指すものをコピーして、2つのポインターがそれぞれ別個のオブジェクトを参照するようにします。

  • ベクトル、文字列などは何をしますか
  • コンテナクラスのコピーコンストラクタとコピー割り当てが必要です

基本的に、これは要約すると次のようになります。ポインタを正しく効率的かつ安全に管理します。例外セーフクラスの設計例外安全性、および例外セーフ関数の呼び出しに関するコピーアンドスワップのイディオムとSutterのGOTWの記事も調べてみてください。

于 2012-05-20T21:39:26.260 に答える
1

ゲームから例を挙げることができます。戦略ゲームがあり、敵の兵士には鎧や健康などの個別の属性があるとします。ゲームがこれらの属性をテキスト ファイルから読み取り、敵の兵士が作成されるたびに属性を割り当てるとします。テキスト ファイルからすべての情報を何度も読み取るか、テキスト ファイルをメモリに保持する代わりに (通常はオブジェクト形式よりも大きい)、同じテキスト ファイルから読み込み段階で作成されるプロトタイプ オブジェクトのプールを保持します。 、より良い解決策かもしれません。敵の兵士が必要な場合は、新しいオブジェクトのコンストラクターに渡すか、ファクトリー パターンでプロトタイプ オブジェクトから作成できます。コンストラクター(またはファクトリークラス)では、確かにディープコピーが必要であり、注意が必要です.

于 2012-05-20T21:51:01.160 に答える