标签:
#include<iostream> using namespace std; class A { public: A(){cout<<"执行构造函数创建一个对象\n";} A(A&){cout<<"执行复制构造函数创建该对象的副本\n";} ~A(){cout<<"执行析构函数删除该对象\n";} }; A func(A one) { return one; } int main() { A a; func(a); return 0; }
上面这段代码是通过按值传递对象的,首先创建一个类A对象,然后设置一个func的函数,定义为类A的返回类型,即返回类A的对象。在主函数调用func函数的时候传进类A对象,func函数定义的时候也要创建一个类A的对象来接收参数。
#include<iostream> using namespace std; class A { public: A(){cout<<"执行构造函数创建一个对象\n";} A(A&){cout<<"执行赋值构造函数创建该对象的副本\n";} ~A(){cout<<"执行析构函数删除该对象\n";} }; A* func(A *one) { return one; } int main() { A a; func(&a); return 0; }
而这一段代码是通过按址传递对象,取a对象的地址传进func函数的参数,同时在func函数也要创建一个类A的指针,这样指针才能指向类A,而func函数的返回类型也改为类A的指针,然后返回的是指针变量。
总结:按址传递对象比按值传递对象的好处在于按值传递对象需要多次拷贝对象来传参,按址传递对象是在原来的内存基础上对对象的修改。
标签:
原文地址:http://www.cnblogs.com/k5bg/p/k5.html