Fork me on GitHub

按值传递对象和按址传递对象

演示程序

 1 #include <iostream>
 2 using namespace std;
 3 class A
 4 {
 5 public:
 6     A(){cout<<"执行构造函数创建一个对象\n";}
 7     A(A&){cout<<"执行复制构造函数创建该对象的副本\n";}
 8     ~A(){cout<<"执行析构函数删除该对象\n";}
 9 };
10 A func(A one)
11 {
12     return one;//func函数的返回值是类A的一个对象
13 }
14 int main()
15 {
16     A a;//执行第一次构造函数-->执行构造函数创建一个对象
17     func(a);//跳转到函数定义处,执行两次复制构造函数-->第一次,传递参数,第二次,返回参数
18     //func函数调用完毕,执行析构函数释放掉func函数内存,又因为返回值也会被释放,所以在此调用析构函数释放
19     return 0;//main函数结束,调用析构函数释放对象a
20 }

 结果:

修改,改为按址传递对象

 1 #include <iostream>
 2 using namespace std;
 3 class A
 4 {
 5 public:
 6     A(){cout<<"执行构造函数创建一个对象\n";}
 7     A(A&){cout<<"执行复制构造函数创建该对象的副本\n";}
 8     ~A(){cout<<"执行析构函数删除该对象\n";}
 9 };
10 A* func(A *one)
11 {
12     return one;//func函数的返回值是类A的一个对象,-->现在返回了一个对象地址
13 }
14 int main()
15 {
16     A a;
17     func(&a);//运用按址传递传递参数的地址来减少复制构造函数的使用
18     return 0;//main函数结束,调用析构函数释放对象a
19 }

结果

证明按址传递比按值传递对象要节约资源得多

posted @ 2015-08-01 15:16  夏成都  阅读(316)  评论(0编辑  收藏  举报