版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HaloTrriger/article/details/81190807
今天刷题,遇到了拷贝构造优化的题,没有做对。对此,当然不能放任不管啦,经过这么多实践,终于搞懂优化了。
友情提示:推荐对拷贝构造优化有一定了解的人,因为此篇博客不做讲解,测试平台VS 2015,Debug模式x64。
只有一句话给各位看观,希望能帮助各位更好了解。
归根结底,调用拷贝构造函数的情况一定是这个对象不存在;如果对象存在,则调用的就是赋值运算符的重载了。
class A
{
public:
A()
{
cout << "构造"<<endl;
}
A(const A&a)
{
cout << "拷贝构造"<<endl;
}
A &operator=(const A &x)
{
cout << "赋值运算符重载"<<endl;
return *this;
}
};
//A a发生一次拷贝构造
//return a发生一次拷贝构造
//具体情况,根据优化而定
A Test(A a)
{
return a;
}
int main()
{
A a1, a2;//"构造 构造"
A a3 = a1;//"拷贝构造"
A a4 = A();//"构造 "
cout << "A a5 = Test(a1): "<<endl;
A a5 = Test(a1);//两次拷贝构造
cout << "A a6 = Test(Test(Test(a1))): " << endl;
A a6 = Test(Test(a1));//三次拷贝构造
cout << "A a7 = Test(A()): " << endl;
A a7 = Test(A());//一次构造,一次拷贝构造
cout << "a2 = Test(a1): " << endl;;
a2 = Test(a1);//拷贝构造,拷贝构造,赋值运算符重载
cout << "a2 = Test(A()): "<<endl;
a2 = Test(A());//构造,拷贝构造,赋值运算符重载
}