C++コピー構築および代入演算子
文書ディレクトリ 一、概念 1、コピー構造 2、代入演算子 3、引用例 二、知識点剖析 1、参照(ポインタまたは参照ではない)パスコピー構造 .2、参照参照参照非コピー構造 3、クラスメンバー変数は初期化せずにデフォルト構造 を歩む.4、クラス初期化リストコピー構造 5、賦値不走コピー構造、走'='演算子 6、初期化賦値走コピー構造、不走'='演算子
一、概念
1、コピー構造
2、代入演算子
3、引用例上の4行を見て、それぞれ何の構造関数を呼び出していますか? 思考1分... 回答: の3行目は間違いやすい点です.次に、これらの点をまとめます.
二、知識点剖析
1.参照(ポインタまたは参照ではない)コピー構造パラメータは非参照クラスオブジェクトインスタンスであり、デフォルトではコピーコンストラクタが1回実行されます.
2、引用伝参不走コピー構造は、参照が別名に相当するため、参照時に構造関数をコピーする必要はありません.
3、クラスメンバー変数は初期化せずにデフォルトの構造を作るの最初の出力は、関数伝達パラメータのコピー構造関数である. の2番目の出力はクラスメンバーtc_である自分のデフォルトのコンストラクタ、TClassDelegatorCクラスのコンストラクタは、すべてのメンバー変数のコンストラクタを1回歩きます.
4、クラス初期化リストのコピー構造の最初の出力は、関数伝達パラメータのコピー構造関数である. の2番目の出力は、クラスメンバー初期化リストで呼び出されたコピー構造関数である.
5、賦値不走コピー構造、走'='演算子の最初の出力は、関数伝達パラメータのコピー構造関数である. の2番目の出力はクラスメンバーtc_である自分のデフォルトのコンストラクション関数、TClassDelegatorEクラスがコンストラクションするときにすべてのメンバー変数のコンストラクション関数を1回歩きます. の3番目の出力は、割り当てが呼び出された割り当て演算子である.
6、賦値コピー構造を初期化し、行かない'='演算子の最初の出力は、関数伝達パラメータのコピー構造関数である. の2番目の出力はクラスメンバーtc_である自分のデフォルトのコンストラクション関数、TClassDelegatorFクラスがコンストラクションするときにすべてのメンバー変数のコンストラクション関数を1回歩きます. の第3の出力はakTmpTC呼び出しを初期化するコピー構造である.
一、概念
1、コピー構造
TClass C(A); //
2、代入演算子
TClass C; //
C = A; // '='
3、引用例
class TClass
{
public:
//
TClass() {
printf("Default Constructor
");
}
//
TClass(const TClass& other) {
printf("Copy Constructor
");
Copy(other);
}
//
TClass& operator=(const TClass &other) {
printf("operator=
");
Copy(other);
return *this;
}
//
virtual ~TClass() {
}
//
void Copy(const TClass &other) {
data = other.data;
}
private:
int data;
};
TClass A, B; // 1
TClass C(A); // 2
TClass D = B; // 3
B = A; // 4
TClass A, B; // Default Constructor
TClass C(A); // Copy Constructor
TClass D = B; // Copy Constructor
B = A; // operator=
二、知識点剖析
1.参照(ポインタまたは参照ではない)コピー構造
struct TClassDelegatorA {
TClassDelegatorA(TClass akTC) {
}
};
TClassDelegatorA AA(A);
Copy Constructor
2、引用伝参不走コピー構造
struct TClassDelegatorB {
TClassDelegatorB(TClass& akTC) {
}
};
TClassDelegatorB BB(A);
3、クラスメンバー変数は初期化せずにデフォルトの構造を作る
struct TClassDelegatorC {
TClass tc_;
TClassDelegatorC(TClass akTC) {
}
};
TClassDelegatorC CC(A);
Copy Constructor
Default Constructor
4、クラス初期化リストのコピー構造
struct TClassDelegatorD {
TClass tc_;
TClassDelegatorD(TClass akTC) : tc_(akTC) {
}
};
TClassDelegatorD DD(A);
Copy Constructor
Copy Constructor
5、賦値不走コピー構造、走'='演算子
struct TClassDelegatorE {
TClass tc_;
TClassDelegatorE(TClass akTC) {
tc_ = akTC;
}
};
TClassDelegatorE EE(A);
Copy Constructor
Default Constructor
operator=
6、賦値コピー構造を初期化し、行かない'='演算子
struct TClassDelegatorF {
TClass tc_;
TClassDelegatorF(TClass akTC) {
TClass akTmpTC = akTC;
}
};
Copy Constructor
Default Constructor
Copy Constructor