金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
C++引用优于指针

(转载请注明来源于金庆的专栏)

在KOK3服务器的崩溃错误中, 十有八九是由空指针引起的.

在C语言中, 空指针确实是错误的一大来源, 到处是空指针判断, 可还是会有漏网的.

在C++中, 空指针错误可以大大减少, 方法就是尽量使用C++的引用代替指针.

void foo(A* pA)
{
    BOOST_ASSERT(pA);
    
    // act on pA...
}

应该改为

void foo(A& rA)
{
    // act on rA...
}

如果输入参数为const, 那更是无疑的应该使用引用作为参数.

除了参数可以转成引用, 临时变量也尽量使用引用. 例如:

A* pA = getA();
if (pA)
{
    // act on pA...
}

可以改为

A* pA = getA();
if (pA)
{
    A& rA = *pA;
    // act on rA...
}

如果getA()不会返回NULL, 就将getA()改为返回引用, 而不是指针.
 
posted on 2009-10-26 09:34 金庆 阅读(3033) 评论(17)  编辑 收藏 引用 所属分类: 1. C/C++2. 网游开发

评论

# re: C++引用优于指针 2009-10-26 11:41 tbw淘宝
空指针确实是错误的一大来源  回复  更多评论
  

# re: C++引用优于指针 2009-10-26 11:56 凡客诚品
如果输入参数为const, 那更是无疑的应该使用引用作为参数.  回复  更多评论
  

# re: C++引用优于指针 2009-10-26 12:50 Johnson
除了参数可以转成引用, 临时变量也尽量使用引用. 例如:

A* pA = getA();
if (pA)
{
// act on pA...
}

哪来的临时变量??  回复  更多评论
  

# re: C++引用优于指针 2009-10-26 14:13 nelson
我觉得,引用是指针的另一种表现方式而已。搞到底还是会有被引用(或被指向)的东西不存在的状况,私以为用引用的时候会更容易疏忽这种问题。  回复  更多评论
  

# re: C++引用优于指针 2009-10-26 14:40 萌萌
解决空指针的问题不应该换成引用,而是让指针的使用更安全。
  回复  更多评论
  

# re: C++引用优于指针 2009-10-26 15:19 Johnson
一种认为指针优于引用的理由是,指针有时候更醒目,提醒开发人员,该函数要对传入参数进行修改:
A a;
operate(&a);
而用引用,则是
operate(a);

假如得到的对象指针的确为空,简单地用引用代替指针传值,会在运行时直接崩溃,连进行错误处理的机会都没有。

  回复  更多评论
  

# re: C++引用优于指针 2009-10-26 16:03 陈昱(CY)
Effective c++还是more Effective c++就有说到这个   回复  更多评论
  

# re: C++引用优于指针 2009-10-26 18:12 WaiTing
楼主的观点不敢苟同..
  回复  更多评论
  

# re: C++引用优于指针 2009-10-27 16:58 gxm2052
指针操作的基本功是一定要搞得非常扎实的,随便找个引用根本解决不了问题,如果真的不行,那去用.net,或者java好了。  回复  更多评论
  

# re: C++引用优于指针 2009-10-27 16:59 溪流
@Johnson

RE。这一段不知道搂住再说什么  回复  更多评论
  

# re: C++引用优于指针 2009-10-27 16:59 溪流
@Johnson
一种认为指针优于引用的理由是,指针有时候更醒目,提醒开发人员,该函数要对传入参数进行修改:


我也这么认为  回复  更多评论
  

# re: C++引用优于指针 2009-10-28 13:07 矩阵操作
@溪流

C++老手应该都会如此。^_^  回复  更多评论
  

# re: C++引用优于指针 2009-10-28 13:10 coloriy
我还是觉得印引用好,不会产生额外开销!  回复  更多评论
  

# re: C++引用优于指针 2009-10-28 20:03 侠客西风
问题是有些时候必须使用指针,不能用引用

Windows API中就有好多这样的例子,为null的时候表示要进行其他的操作,不为null的时候表示是一个buffer的地址,比如:
MultiByteToWideChar()  回复  更多评论
  

# re: C++引用优于指针[未登录] 2009-10-30 10:18 杨粼波
工程庞大,人员众多,一切都变得复杂。很难保证。
能用智能指针就用智能指针。  回复  更多评论
  

# re: C++引用优于指针 2009-10-30 16:09 金庆
@Johnson
@溪流
在C++中, 指针和引用参数都是提醒开发人员这是输出参数.
表示输入参数的是const关键字.  回复  更多评论
  

# re: C++引用优于指针 2010-07-27 02:05 yisa
如果连空指针都处理不好, 那何苦要用C++呢  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理