C ++の研究ノートレッスン19深いコピー

研究ノートの内容から:Ditaiソフトウェア・カレッジTangzuo林先生のビデオ、私はあなたの指導に感謝します

特別なコンストラクタ

引数なしのコンストラクタ
の定義は、クラスのコンストラクタではありません、コンパイラは、引数なしのデフォルトコンストラクタを提供しないと、関数本体は空です

コピーコンストラクタ
時にコピーコンストラクタクラスが定義されていない場合、コンパイラは単にメンバ変数の値をコピーし、デフォルトのコピーコンストラクタを提供

したがって、以下のクラス定義は、デフォルトではありません隠された引数コンストラクタとコピーコンストラクタが存在しないので、空でない
クラステスト{}。

初期化と代入

初期化及び割り当ては同じではありませんC ++においては、初期化コンストラクタをトリガし、割り当てがありません

コピーコンストラクタ

1.形式:claas_name(CONST&別CLASS_NAME){}
2.意義:初期化された互換性のあるC言語

コピーコンストラクタの深い浅いコピーコピー

1.浅いコピー:後のオブジェクトの同じ物理的状態のコピー
2ディープコピー:同じ論理状態オブジェクトのコピー後

PS:コンパイラによってのみ簡易コピーを提供するコピーコンストラクタ

ときに深いコピーの必要性

オブジェクトの1メンバーは、システム内のリソースを参照
2.動的メモリ空間尖った部材
3の外部メモリ内のファイルを開いた部材
4のシステムで使用されるポート部材
5 ...

サンプルプログラム:

class Array
{
private:
    int* m_data;
    int m_length;
public:
    Array()
    {
        data = new int[5];
    }
    
    Array(const Array& another)
    {
        /*
         * 浅拷贝:
         * this->m_data = another.m_data;
         * this->length = another.length;
         * 
         * 深拷贝:
         * 
         * this->m_data = new int[5];
         * this->length = another.length;
       */
    }
    
    ~Array()
    {
        delete[] this->m_data;
    }
};

ディープコピーが実行されていない場合、デストラクタがいつ発生する再剥離メモリ空間と、意志のミス

公開された11元の記事 ウォンの賞賛0 ビュー77

おすすめ

転載: blog.csdn.net/u012321968/article/details/104450358