引用經常被用作函數參數,使得函數中的變量名成為調用程序中的變量別名。這種傳遞參數 的方法稱為按引用傳遞。按引用傳遞允許被調用的函數能夠訪問調用函數中的變量。
void foo(int* ptr); //傳值調用
int a;
int* pValue = &a;
foo(pValue);
其中,pValue的值不能被函數foo改變的,即pValue指向a
但是如果是
void foo(int*& ptr); //傳遞引用
void foo(int*& ptr)
{
ptr = NULL;
}
調用過后,pValue就變成了NULL。而第一種情況pValue不能被改變。
引用是C++重要特性之一,在大多數情況下避免了使用指針。在C++中,引用不可捏造,比如C你可以很容易弄一個NULL的指針,而引用不存在NULL引用。
上述foo函數要用C來實現,則要用指針的指針:
void foo(int** pptr)
{
*ptr = NULL;
}
調用時要foo(&pValue)
這種技術很多用在比如定義一個安全刪除指針的函數,所謂安全就是,只有當指針為零的時候才
執行刪除,刪除之后,立刻把指針賦值為NULL。
template<typename T>
inline safe_delete(T*& ptr)
{
if (ptr)
{
delete ptr;
ptr = NULL;
}
}
在C++中,應盡量避免使用指針。