我有几行代码而且我没有得到,为什么以及在哪里调用复制构造函数。你能解释一下吗?
输出结果为:
CS10
CS99
CC100
Obj10 = Obj100
D100
Obj10 = Obj99
D99
D10
这是我的源代码:
#include <iostream>
using namespace std;
class my
{
int m;
public:
my(int i): m(i)
{
cout << "CS" << m << endl;
}
my(const my& c): m(c.m+1)
{
cout << "CC" << m << endl;
}
~my()
{
cout << "D" << m << endl;
}
my& operator=(const my &c)
{
cout << "Obj" << m << "=Obj" << c.m << endl;
return *this;
}
};
my f(my* x)
{
return *x;
}
int main()
{
my m1(10);
my m2(99);
m1 = f(&m2); // creates a new object
m1 = m2; // does not create a new object
}
为什么以及在哪里复制构造函数调用导致输出CC100和D100?
答案 0 :(得分:3)
在此功能中
my f(my* x)
{
return *x;
}
在声明
中调用m1 = f(&m2); // creates a new object
调用复制构造函数来复制返回临时对象中的object *。
实际上它看起来像
my tmp = *x; // the copy constructor is called
m1 = tmp;
答案 1 :(得分:0)
当试图考虑何时调用复制构造函数时,您应该记住以下几点:
我强烈建议您稍微阅读汇编代码操作,甚至尝试将简单程序编译成汇编程序,并了解低级语言的工作原理。干杯!