5.5.2 使用引用代替指针
C++(www.cppentry.com)程序员通常开始学的都是C。在C中,指针是唯一的按引用传递的机制,并且多年以来一直运行良好。在某些情况下仍然需要指针,但在许多情况下可以用引用代替指针。如果您开始学习的是C,您可能认为引用实际上没有增加新的功能。您可能认为引用只是引入了一种新的语法,其功能已经由指针提供。
用引用替换指针有许多好处。首先,引用比指针安全,因为不会直接处理内存地址,并且不会是nullptr。其次,引用在文体上比指针好,因为所用的语法与堆栈变量相同,没有使用诸如*以及&的符号。引用易于使用,因此将引用加入到您的风格中没有任何问题。遗憾的是,某些程序员认为如果在函数调用中看到&,他们知道被调用函数将改变对象;如果他们没有看到&,那么一定是按值传递。使用引用时,如果没有看到函数原型,他们无法判断函数是否将改变对象的值。这种思维方式是错误的。用指针传递未必意味着对象将会被改变,因为参数可能是const T*。传递指针或者引用是否会修改对象都取决于函数原型是否使用const T*、 T*、 const T& 或者T&。因此,为了判断函数是否可能改变对象,无论如何您都要查看函数原型。
使用引用的另一个好处是它明确了内存的所有权。如果您编写一个方法,其他程序员传递给您一个对象的引用,很明显您可以读取并修改这个对象,但是您无法轻易地释放对象的内存。如果传递的是一个指针,就不那么明显。您需要删除对象来清理内存么?还是调用者需要这样做?您的团队应该决定如何用变量传递技术表示内存所有权。处理内存较好的方法是使用智能指针,这一内容将在第21章详细讨论。