コピーコンストラクタを扱わずに新しいクラスオブジェクトを安全にコピーするためのオンラインリファレンスを見つけるのは非常に難しいと感じています。私は「CLabel」と呼ばれる子クラスのコンストラクターメソッドに取り組んでおり、この特定のコンストラクターのロジック(これは3つのうちの最初のものです)に対する教授のコメントは次のとおりです。
「この構造は、CLabelを安全にコピーして、メモリリークがないことを保証します。」
関数ヘッダーは次のとおりです。
CLabel::CLabel(const CLabel& L)
クラス自体のコンテキストを見てみると、宣言に明示的なデータメンバーはありません。したがって、私の質問は、データメンバーを含まない参照によって渡されるクラスインスタンスのディープコピーをどのように作成するかということです。
これまでのところ、これが私のクラックです-コンパイルしますが、Visual Studioは例外をキャッチしました-"t1.exeの0x770F380B(ntdll.dll)で未処理の例外:0xC0000374:ヒープが破損しています(パラメーター:0x7710CDD8)。":
*this = L;
int l = L.width();
this->_data = new char[l+1];
int i = 0;
for(; i < l; i++)
((char*)_data)[i] = ((char*)L._data)[i];
((char*)_data)[i] = '\0';
テスターファイルの次の行で例外がキャッチされました。
int mesIndx = D.add(new CLabel(7, 5, 40));
この特定の割り当てに関する必要なコンテキストについては、APIのドキュメントはhttp://zenit.senecac.on.ca/wiki/index.php/The_CUI_Framework_-_OOP344_20132#CLabelにあります。
みんな、ありがとう。