引用和指针的使用选择

April 15, 2009 No Comments

关于指针和引用的使用,情况不特殊的时候,区别并不大,介绍大都推荐使用引用,因为更安全,但指针还是有引用所不能替代的功用,亦不可忽视。

引用的特点:

  1. C++中,引用须被初始化指向某个对象,一旦被初始化指向某个对象,将始终指向该对象,其后的 “=”操作均为赋值,改变的是初始化时指向对象的值。
  2. 引用不能为空,引用必须指向一个存在的对象。

注意以下代码:

char *pc = 0; // set pointer to null
char& rc = *pc; // make reference refer to dereferenced null pointer

这个行为未定义,应加以避免。

指针和引用的不同:

  1. 引用的代码效率比指针要高,因为在使用引用之前不需要测试它的合法性,相反,指针则应该总是被测试,防止其为空。
  2. 指针可以被重新赋值以指向另一个不同的对象(这也是指针不安全的根源所在),引用则总是指向在初始化时被指定的对象,以后不能改变。

指针和引用的使用:
使用指针:

  1. 可能需要在某个时刻不指向任何对象(可以将指针赋值为空);
  2. 可能需要在不同的时刻指向不同的对象(可以改变指针的指向)。

使用引用:

  1. 总是指向一个对象,且一旦指向一个对象后就不会改变;
  2. 重载某个操作符,例如 [],以防止不必要的语义误解。

Tip:当一个函数需要返回一个对象的引用时,选择返回对象的指针,而不是引用,因为指针可以测试返回结果的合法性,判断其值是否为空!

参考 《More Effectvie C++》

推荐阅读:《References vs. Pointers》

Programming

Leave a Reply

Flickr Photostream