自学内容网 自学内容网

对象优化及右值引用优化(二)

对象优化及右值引用优化(二)

函数调用举例

class Test {
public:
    Test(int val = 0) :val_(val) {
        cout << "Test::Test" << endl;
    }
    ~Test()
    {
        cout << "Test::~Test" << endl;
    }

    Test(const Test& test)
    {
        cout << "Test::Test(const Test& test)" << endl;
        val_ = test.val_;
    }

    Test& operator=(const Test& test)
    {
        if (this == &test)
            return *this;
        cout << "Test::operator=(const Test& test)" << endl;
        val_ = test.val_;
        return *this;
    }

    int getData() const{ return val_; }
private:
    int val_;
};


Test getObject(Test t)
{
    int val = t.getData();
    Test tmpTest = Test(val);
    return tmpTest;
}

int main()
{
    Test t1(10);
    Test t2;
    t2 = getObject(t1);
}
  1. t1构造函数的调用
  2. t2构造函数的调用
  3. 调用getObject的时候实参t1为形参赋值,调用拷贝构造函数
  4. 进入getObject函数,在其栈帧对tmpTest对象进行构造,调用构造函数
  5. 返回tmpTest的时候,会在main栈帧创建临时变量,调用拷贝构造函数
  6. 出了getObject的栈帧的时候会对tmpTest调用析构函数
  7. 对getObject的对象t进行析构
  8. 临时对象对t2进行赋值,调用赋值函数
  9. 执行到下一语句,临时对象析构
  10. t2析构
  11. t1析构

注:不同编译器其执行顺序略有不同


原文地址:https://blog.csdn.net/weixin_43459437/article/details/143620891

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!