对象优化及右值引用优化(二)
对象优化及右值引用优化(二)
函数调用举例
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);
}
- t1构造函数的调用
- t2构造函数的调用
- 调用getObject的时候实参t1为形参赋值,调用拷贝构造函数
- 进入getObject函数,在其栈帧对tmpTest对象进行构造,调用构造函数
- 返回tmpTest的时候,会在main栈帧创建临时变量,调用拷贝构造函数
- 出了getObject的栈帧的时候会对tmpTest调用析构函数
- 对getObject的对象t进行析构
- 临时对象对t2进行赋值,调用赋值函数
- 执行到下一语句,临时对象析构
- t2析构
- t1析构
注:不同编译器其执行顺序略有不同
原文地址:https://blog.csdn.net/weixin_43459437/article/details/143620891
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!