#include <iostream>
using namespace std;
class A
{
int x;
public:
A(int c) : x(c) {}
A(const A& a) { x = a.x; cout << "copy constructor called" << endl;}
};
class B
{
A a;
public:
B(int c) : a(c) {}
B(const B& b) : a(b.a) { }
A get_A() { return a;}
};
int main()
{
B b(10);
A a1 = b.get_A();
}
上記のコードでは、最初に b.get_A() がコピー コンストラクター (1) を呼び出す一時オブジェクトを作成し、次にその参照を a1 にコピーするため、「コピー コンストラクターが呼び出されました」というメッセージが 2 回表示されると予想していました。 s copy constructor (2) 。したがって、2 つのメッセージが表示されます。
ただし、コードは実際には単一の「コピー コンストラクターが呼び出されました」というメッセージを生成します。なんで?