实现MyString类(三)—关于返回对象的说明

来源:互联网 发布:qq社交网络案例分析 编辑:程序博客网 时间:2024/05/29 12:04

 

     通过前两章类得设计和实现我们发现,在我们的函数返回结果中,有的是返回对象的引用,有的返回一个一般得类对象,还有的返回const型的类对象引用,那么究竟我们该怎么设计方法的返回类型呢,下面我们就进行相关的分析和学习。

 

    1.返回指向const(非const)对象的引用。    

     使用const一般我们旨在提高效率,那么同时被const限定的对象或者参数在被调用的过程中也不能进行任何修改,要不然程序会进行报错。

      如果函数返回传递给它的对象,那么可以使用返回指向对象的引用进行返回来提高效率。

       举例:

            

      那么上面两个函数都可以实现两个字符串的合并操作,但是第一个返回的是关于对象的一个引用,而第二个是直接返回对象。那么这里我们有三点进行说明:

       1)直接返回对象时需要调用复制构造函数,而返回引用不会,所以第一个函数效率更高。

       2)返回引用的对象必须在函数调用的时候还存在。this是指向当前对象的指针,肯定在调用的时候存在,所以满足条件

       3)因为返回对象的时候对象已经被改变了,所以不能返回const类型。(当返回的对象类型没有变化时,可以返回const类型提高效率)

    2.返回对象

       一般返回对象的都是被调用函数局部定义的对象,因为局部定义的对象在调用结束的时候,将调用析构函数析构,那么等到控制权回到调用函数的时候,引用的对象已经不再存在。所以这种情况下,必须直接返回对象。

      例子:

           

         被重载的运算符一般都属于这一类,在这个过程中调用复制构造函数是不可避免的。

   3.我们也可是使用返回const对象以防止函数对对象的任何更改。

   总结:

     当我们要返回一个局部对象时,必须通过复制构造函数直接返回对象;

     当我们要返回调用对象或者是没有公有复制构造函数的类得对象时,返回一个指向对象的引用。

     如果两者都可以,那么我们优先选择返回引用以提高 效率。