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

转载 2015年07月10日 11:57:04
这个问题 困扰了 我很长时间,现在征求解答 :
下面是模拟代码 
代码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: 尽量用“传引用”而不用“传值”。

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

函数返回引用和指针类型

新博客地址:http://gorthon.sinaapp.com/ #include #include #include char *g() { char p[]="heel"; retu...
  • bh20077
  • bh20077
  • 2011年05月27日 10:50
  • 675

C语言函数返回类型为指针时的一些问题

1.先看程序: #include char  *returnStr() {            char  *p = “tigerjibo”;         ...

C语言函数返回类型为指针时的一些问题

1.先看程序: #include char  *returnStr() {            char  *p = “tigerjibo”;         ...

C语言函数返回类型为指针时的四个问题

1.先看程序: #include char  *returnStr() {            char  *p = “tigerjibo”;         ...
  • xamhaha
  • xamhaha
  • 2017年05月09日 16:15
  • 142

C语言函数返回类型为指针时的一些问题

1.先看程序: #include char  *returnStr() {            char  *p = “tigerjibo”;         ...
  • gmq_syy
  • gmq_syy
  • 2017年06月21日 14:09
  • 44

ORACLE 函数返回对象类型结果集

注:适用于表中只有一行数据,如果多行数据建议用表类型结果集 创建对象类型 CREATE OR REPLACE TYPE "T_B_PARAMETER" AS OBJECT ( PARAMETE...
  • gahaya
  • gahaya
  • 2014年09月16日 15:03
  • 281

函数返回的临时对象为const类型,const引用

#include #include     using namespace std; class A { public: A(){ m_Int = 10; } publi...

函数返回类型为指针类型时的一些问题

http://blog.csdn.net/tigerjibo/article/details/7425571 1.先看程序: #include char  *returnStr() {...
  • cjsycyl
  • cjsycyl
  • 2013年08月15日 16:20
  • 404

函数返回类型为指针类型时的一些问题

1.先看程序:#includechar  *returnStr(){           char  *p = “tigerjibo”;           return  p;}int  main(...
  • tigerjb
  • tigerjb
  • 2012年04月04日 14:43
  • 12350

对引用和指针使用以及函数返回引用和指针类型的理解

引用的符号是&,指针的符号是* 先来看看一段测试代码, #include "stdafx.h" #include using namespace std; int globa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数返回什么类型好:指针还是对象
举报原因:
原因补充:

(最多只允许输入30个字)