郑莉等编著的<C++语言程序设计(第四版)>上类与对象章节,复制构造函数中提到复制构造函数被调用的三种情况,依次为
1)当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值
2)当函数的返回值是类对象时,系统自动调用拷贝构造函数
3)如果函数的返回值是类的对象,函数执行完成返回调用者时
并举了一个例子,并特别说明了一点:
在有些编译环境下,该例子的运行结果可能不尽相同,因为编译器有时会针对复制构造函数(拷贝构造函数)的调用做优化,避免不必要的复制构造函数调用;
为了探究复制构造函数被调用的情况,并验证该情况,现书中例子,做了一个修改,修改处,图片也已经注明,源代码如下
#include "iostream.h"
using namespace std;
class Point {public:
Point(int xx=0,int yy=0) {
x=xx;
y=yy;
}
Point(Point &p);
int getX() {
return x;
}
int getY() {
return y;
}
private:
int x,y;
};
Point::Point(Point &p) {
x=p.x+1;
y=p.y;
cout<<"Calling the copy constructor"<<endl;
}
void fun1(Point p) {
cout<<p.getX()<<endl;
}
Point fun2() {
Poi