#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 的引用s 复制构造函数 (2) ,因此显示了两条消息。
但是,该代码实际上会产生一个“称为复制构造函数”的消息。为什么?