注意:每种情况均需要了解:
各个对象(变量)关系、存储位置和生命周期。其实就是对C++中存储模型,函数调用原理,指针等的综合考量。
1 按值传递,按值返回,返回参数
using namespace std;
class A{
public:
A();
A(A& one);
~A();
void set(int i){ x = i;}
void get(){cout<<x<<endl;}
private:
int x;
};A::A()
{
cout<<"执行构造函数创建一个对象\n";
}
A::A(A &one)
{
cout<<"执行复制构造函数创建该对象的副本\n";
}A::~A()
{
cout<<"执行析构函数删除该对象\n";
}A func(A one)
{
return one;
}int main()
{
A a;
func(a);return 0;
}
执行构造函数创建一个对象
执行复制构造函数创建该对象的副本
执行复制构造函数创建该对象的副本
执行析构函数删除该对象
执行析构函数删除该对象
执行析构函数删除该对象
Press any key to continue
-------------------------------------------------------------
A func(A one)
{
return one;
}int main()
{
A a;
A b = func(a);cout<<"---------\n";
return 0;
}执行构造函数创建一个对象
执行复制构造函数创建该对象的副本
执行复制构造函数创建该对象的副本
执行析构函数删除该对象
--------
执行析构函数删除该对象
执行析构函数删除该对象
ress any key to continue结论:
返回对象是参数对象的复制
参数对象在栈
返回对象在栈参数对象在函数结束时立即消失
返回对象如果被引用就在调用函数周期中