レイジー コピーを使用しているクラスがあります。コピー コンストラクターが呼び出されると浅いコピーが作成され、1 つのメソッドが呼び出されるとディープ コピーが作成され、さらにデータが追加されます。
その浅いコピーから深いコピーを作成する必要がある部分で立ち往生しています。
ディープ コピーは次のようになります。
m_count = copy.m_count;
k = copy.k;
m_record = new TRecord * [k*SIZE];
char * temp;
for(int i=0;i<m_count;i++) {
m_record[i] = new TRecord;
temp = new char[12];
strcpy(temp, copy.m_record[i]->Id);
m_record[i]->Id = temp;
temp = new char[strlen(copy.m_record[i]->Name) + 1];
strcpy(temp, copy.m_record[i]->Name);
m_record[i]->Name = temp;
temp = new char[strlen(copy.m_record[i]->Surname) + 1];
strcpy(temp, copy.m_record[i]->Surname);
m_record[i]->Surname = temp;
}
しかし、その方法を実装する方法がわかりません。一時オブジェクトを作成して *this で埋めようとしました
temp.m_count = this->m_count;...
そして最後に
*this=temp;
しかし、うまくいきません。
そもそもディープコピーを作成しないのはなぜですか? 非常に多くのコピーがあり、変更されるのはごくわずかであり、大量のメモリを消費するためです。
どうすればいいですか?
PS このタスクで STL と文字列を使用することは禁止されています。