#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"构造函数运行\n";}
A(A&t){cout<<"拷贝构造函数运行\n";}
~A(){cout<<"析构造函数运行\n";}
};
A func()
{
A aa;
return aa;
}
void main()
{
A a;
A b=func();
}
构造函数运行
构造函数运行
拷贝构造函数运行
析构造函数运行
析构造函数运行
析构造函数运行
运行结果的拷贝构造函数是那一句所导致的?
是main里面的赋值语句 还是func函数返回aa时的副本?
若果A b=func();改成func();结果一致。
说明A b=func();赋值时没有调用拷贝构造函数,那么为什么将其换成简单的A b=a;会有拷贝构造函数?
return aa;这一句会产生拷贝构造函数,用来构造返回值。
A b=a;这句也会产生拷贝构造函数,用来构造b这个对象。
A b=func(),这句可能产生额外的拷贝构造,也可能不产生。因为func()的返回的临时变量可以被优化掉,在return的时候直接就构造b.这是视具体编译器的实现。
在C++标准中对于这个的论述如下,有兴趣就看看吧。
谢谢您的回答!很专业!!
赋值运算符会产生“拷贝”的效果