关于return范围类对象的,对于构造函数调用的疑问。
最近在学习C++的构造函数,遇到了一个疑问,先上一段代码
class point
{
private:
int x, y;//数据成员
public:
point(int xx = 0, int yy = 0)//构造函数
{
x = xx;
y = yy;
cout << "构造函数被调用" << endl;
}
point(point &p);//拷贝构造函数,参数是对象的引用
~point() { cout << "析构函数被调用" << endl; }
int get_x() { return x; }//方法
int get_y() { return y; }
};
point::point(point &p)
{
x = p.x;//将对象p的变相赋值给当前成员变量。
y = p.y;
cout << "拷贝构造函数被调用" << endl;
}
point g()//返回类型是point
{
point a(7, 33);
return a;
}
以上代码是为了研究类对象创建和撤销时候调用函数的情况。
void main()
{
point a=g();
}
运行结果是:
构造函数被调用
拷贝构造函数被调用
析构函数被调用
析构函数被调用
若主函数改为
void main()
{
point a(15, 22);
a=g();
}
运行结果是:
构造函数被调用
构造函数被调用
拷贝构造函数被调用
析构函数被调用
析构函数被调用
析构函数被调用
第二个主函数中,我理解是return函数返回参数副本,所以用了拷贝构造函数,所以我觉得第一个主函数应该有两个拷贝构造函数,一个是函数体内return返回参数副本调用,还有一个是外部声明定义用到拷贝构造函数,但是实际运行结果跟我想的不一样,不知道为什么