「使用的時候可以參考和指針,當你不得不這樣做。」
我覺得上面說,它不是那麼容易。已經很好地討論了引用通常對指針更好的原因。所以,我寧願談談特殊情況下的參考意義,但極不尋常的,只是覺得不舒服:
對我來說,最明顯的例子是他們就像一棵樹或linked- 通用數據結構使用名單。其接口可使用的引用和感覺更安全地肯定實現,但我還沒有看到一個單一的實現,將採取引用的優勢,例如:
Node *parent = n.parent(); // parent might be unset -> pointer
Node &child = n.child(5); // child is always valid -> reference
雖然似乎有吸引力,它會導致這樣的代碼:
if(parent == &child) ... // weird, unusual at least?
我不知道,這算什麼代表純C++?
每一個我試圖盲目使用引用無論它是可能的時候,我遇到的各種類似不一致,結束了混合指針和各種醜陋的方式引用。
總之,爲什麼運營商新沒有返回一個引用到一個新的實例,而不是一個指針? (在錯誤的情況下拋出):
Node &n = new Node;
delete &n;
這是一個荒謬的例子,但是,這不是什麼會是「純粹的C++」?
你錯過了這一點。將報價想象爲「儘可能使用自動存儲,並在必要時動態存儲(新建)」。 – ildjarn 2012-03-16 22:06:08
使用任何有意義的東西。通常,這意味着實現容器的指針,以及客戶端代碼中的引用。而且,沒有人能夠阻止任何人寫出荒謬的代碼,所以如果有人說'delete&x;',那麼你可以做的不多。你必須假設你的客戶*希望*編寫正確的程序。你只需要讓他們變得容易。 – 2012-03-16 22:07:09
將對象傳遞給函數時,引用也是首選,因爲由於沒有調用複製構造函數而更快。 – chris 2012-03-16 22:07:28