研究ノートの内容から: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;
}
};
ディープコピーが実行されていない場合、デストラクタがいつ発生する再剥離メモリ空間と、意志のミス