论坛首页· 友情链接申请·申请版主· 广告投放· 道具中心· 设为首页· 收藏本站
发新话题
打印

[教程] 用值返回对象

用值返回对象

出于效率的考虑,函数通常都是通过引用,或者说通过地址(也就是指针)方式来传递或返回大对象。很少有通过传值的方式来实现对象传递或返回的情况。但也有例外,一个典型的例子就是重载的 + 操作符。它必须返回一个结果对象,对其操作数不做修改。从表面上看,在堆中(使用new)分配结果对象的空间并返回其地址是很自然的选择。但是这样做并非上策,原因很简单:动态内存分配比局部存储区要慢很多。此外,它还可能失败并抛出异常,这个异常是我们必须要负责捕获并处理的;更槽的是还可能导致内存泄漏,因为删除该对象的责任不明确;有谁来删除对象呢?是对象的创建者,还是用户?另一个解决方案是用静态对象并通过引用返回结果。但这也是有问题的,因为每次使用重载的操作符时,都要修改并返回给调用者相同的静态对象实例,因而导致结果混淆。最安全、出错几率最小、效率最高的解决办法是通过传值来返回结果对象,例如:

class Date {
   int d,m,y;
public:
   Date operator + (const Date& other) const
         {
                Date temp = *this;
                temp += other;
                return temp;
         }
};
因为梦想而努力,因为有你而精彩!
mail: qianzongming@gmail.com

TOP

发新话题