N种拷贝构造优化,多种测试代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 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());//构造,拷贝构造,赋值运算符重载
}

猜你喜欢

转载自blog.csdn.net/HaloTrriger/article/details/81190807