C++深いコピーと浅いコピーの違いと実現


C++深いコピーと浅いコピーの違いと実現
オブジェクトのコピー中にカスタムコピーコンストラクション関数がない場合、デフォルトのコピーコンストラクション関数が提供されます.デフォルトのコピーコンストラクション関数は、基本タイプのメンバー変数に対してバイト単位でコピーされ、クラスタイプのメンバー変数に対して対応するタイプのコピーコンストラクション関数が呼び出されます.
背景:
コピーコンストラクタと付与関数をプロアクティブに記述しないと、コンパイラはデフォルトの関数を「ビットコピー」で自動的に生成します.クラスにポインタパラメータが含まれている場合、クラスStringの2つのオブジェクトについて、a.dataの内容がA、b.dataの内容がBであると仮定します.
1.2つのポインタオブジェクトが同じ領域のメモリを指し、互いに影響します.2.a.dataをb.dataに割り当てたとき、b.dataの元のメモリが解放されず、メモリが漏洩した.3.オブジェクトがメモリを解放するとき、dataは2回解放されます.
!!!コピーコンストラクションオブジェクト文は、次のようによく書きます.
String a(b);          //        

コンストラクション関数とコピーコンストラクション関数の具体的な実装:
//    
Array::Array(int count)
{
  m_iCount = count;
  m_pArr = new int[m_iCount];     //      
  for(int i=0;i