c++中使用引用传递来提高效率

(转自:http://www.diybl.com/course/3_program/c++/cppjs/2008215/99861.html)

 

我们写一个函数,比如 objclass fun(objclass obj); objclass是类名,obj是对象,fun是函数名。

然后调用此函数,编译器分两个步骤:

1.每次通过值传递的方式给函数传递一个对象时,都会建立一个该对象的拷贝。

2.每次通过值从函数返回一个对象时,也会建立另一个拷贝。

也就是说调用一次此函数,系统会自动建立两次的对象拷贝,然后再调用两次析构函数释放对象的拷贝。

我们知道当调用函数的时候,这些对象被复制到栈中,这样做会费时且占用内存,当使用用户定义的大对象时,这种拷贝带来的内存开销是非常显著的。当时用用户建立的类时,每次生成这种临时的拷贝都要调用一个特殊的构造函数:复制构造函数。当函数返回时,对象的临时拷贝被删除,此时需要调用对象的析构函数。如果返回对象时通过值传递的方式,那么必须建立对象的拷贝,然后再删除。对于很大的对象,调用构造函数和析构函数在速度和内存方面都会造成很大的开销。

为了说明这一点见下面的例子:

 

#include 
#include 

using namespace std;

class class_A
{
    public:
        class_A()
        {
            cout<<"class_A 构造函数..."<

 

//-------------------------------------------------------------------------------------------

 

class_A funOne(class_A obj);
class_A *funTwo(class_A *obj);

class_A funOne(class_A obj)
{
    cout<<"函数funOne返回..."<

 

//-------------------------------------------------------------------------------------------

 

int main(int argc, char *argv[])
{
     //调用 class_A的构造函数 
   class_A abc;                      
     //-------------------------------------------------------------------------------------------
     cout<<"调用函数funOne..."<

 
 以上code可以直接复制使用~~


文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/c++/cppjs/2008215/99861.html

你可能感兴趣的:(语言工具,c/c++)