欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 对象优化及右值引用优化(二)

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

2024/11/8 14:11:47 来源:https://blog.csdn.net/weixin_43459437/article/details/143620891  浏览:    关键词:对象优化及右值引用优化(二)

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

函数调用举例

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析构

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com