重複の可能性:
コピー初期化と直接初期化の間に C++ の違いはありますか?
Class A
{
public:
//some member function call
private:
int x;
char a;
};
int main()
{
A a;
A b;
}
こんにちは、上記のクラスのオブジェクトを次のように呼び出しまたは初期化するときに、これらの違いを教えてください。
A a(b);
A a=b;
a=b;
重複の可能性:
コピー初期化と直接初期化の間に C++ の違いはありますか?
Class A
{
public:
//some member function call
private:
int x;
char a;
};
int main()
{
A a;
A b;
}
こんにちは、上記のクラスのオブジェクトを次のように呼び出しまたは初期化するときに、これらの違いを教えてください。
A a(b);
A a=b;
a=b;
最初の 2 行は、オブジェクトが構築されているため、コピー コンストラクターを呼び出します。最後の行は、等号演算子を呼び出して代入を実行します。
A a(b);
A a = b;
これらは、暗黙的に生成されたコピー コンストラクターを使用します。
a = b;
これは代入演算子を使用し、オブジェクトを作成しないため、初期化ではありませんA
。既存の値に新しい値を与えるだけです。
コピー コンストラクターには、次のような署名があります。
A(const A&);
および代入演算子
A& operator=(const A&);
クラスはこれらを提供しないため、コンパイラはそれらを合成し、データ メンバーをコピーするだけです。
クラスには明示的なコピー コンストラクターがないため、上記のステートメントはすべて浅いコピーになります。
コピー コンストラクターを宣言し、= 演算子をオーバーロードした場合
A a(b) および A a= b は、コピー コンストラクターを呼び出し、
a= b は = オーバーロードされた演算子を呼び出すことになります
これを読んで理解を深めましょう