函数返回什么类型好:指针还是对象

这个问题 困扰了 我很长时间,现在征求解答 :
下面是模拟代码 
代码1: 
C/C++ code
FileElement *  FolderElement::GetSingleFile(LPCTSTR fileName)  const
 {
     ......
   FileElement  * pFile  =  new  FileElement(....);
    ......... 
    return  pFile;
}
 
 

代码 2: 
C/C++ code
FileElement FolderElement::GetSingleFile(LPCTSTR fileName)  const 
{
   ......
  FileElement pFile  =  FileElement(....);
   ......... 
  return  pFile;
}
上面两种方式 哪个更好? 代码1的优点是性能好些 ,但容易内存泄漏 (如果调用者不delete就会发生 )
代码2 不会内存泄漏,但传递整个对象,效率要差。
当然还有方法可以把代码1返回的指针用智能指针 包装,使之返回auto_ptr 或shared_ptr,但智能指针也有些其他问题,用起来不如真实指针好用。
还有 一种 方法是返回引用,这个方法当然就更不行了,更容易出现空引用和内存泄漏的事情。还不如指针!

请大家看看,在这种情况下,大家都采用哪种方式 ?代码1还是 代码2 。


毫无疑问,第一种好。
一:效率
二:如果直接传对象的话,很容易出现在对象切割( http://hi.baidu.com/anglecloudy/blog/item/88326a344b82c4b0d0a2d31a.html )这个恶心的问题。指针就不会
三:符合面向对象思想,对多态的实现有利

显然第一种好,第二种要多次拷贝对象,如4楼所说。

主要还是看你要返回的对象到底多大,如果合适,当然可以返回对象了。

各有千秋!
第一种方式,注重效率,但在函数内部new,函数外部delete,被认为是糟糕的函数接口设计。
第二种方式,多了两次拷贝的时间消耗,但接口设计比第一种好。

选择什么,看你的应用需求了。


经常用就1,效率但要注意安全,不经常用比如就调一次,那么2吧,1累。
一般是用方案1,但不是绝对。有些情况只能用方案2。详细信息可以参见Effective C++,条款22: 尽量用“传引用”而不用“传值”。

通常返回指针好一些,这也没有绝对标准,如果你你的程序对安全要求很高而又不太注重效率的话可以考虑对象,否则还是建议返回指针,在内存管理上多用些精力
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值