传递对象

来源:互联网 发布:php 删除文件 编辑:程序博客网 时间:2024/05/31 19:40

按值传递对象时,会调用该对象的复制构造函数创建一个临时副本,如果返回值也是对象则又要调用该对象的复制构造函数来创建一个临时副本。例程如下:

#include<iostream>using namespace std;class A{public:A(){cout<<"调用构造函数"<<endl;}//复制构造函数A(A&){cout<<"调用复制构造函数"<<endl;}~A(){cout<<"调用析构函数"<<endl;}};A fun(A a){return a;}int main(){A a;fun(a);return 0;}


输出结果如下:

按值传递对象的缺点是系统内存开销大。解决的方法是按地址传递或按引用传递。

例程如下:

#include<iostream>using namespace std;class A{public:A(){cout<<"调用构造函数"<<endl;}//复制构造函数A(A&){cout<<"调用复制构造函数"<<endl;}~A(){cout<<"调用析构函数"<<endl;}};A *fun(A *a){return a;}int main(){A a;fun(&a);return 0;}


结果如下

或者:

#include<iostream>using namespace std;class A{public:A(){cout<<"调用构造函数"<<endl;}//复制构造函数A(A&){cout<<"调用复制构造函数"<<endl;}~A(){cout<<"调用析构函数"<<endl;}};A &fun(A &a){return a;}int main(){A a;fun(a);return 0;}


输出结果如上。

原创粉丝点击