2017-02-11 24 views
0

私は最近、いくつかのコードを見て、誰かがこれを使用:逆参照ポインタへの参照を作成しますか?

void Foo(vector<vector<int>>* arr_ptr){ 
vector<vector<int>>& arr = *arr_ptr; 
//use arr 
} 

が間接参照ポインタへの参照を作成するが目的か?限り、ポインタがヌルでないと、同じ結果はこれを使用して実行することができませんでした:それはこのメソッドを呼び出すコードに同じではないでしょう

void Foo(vector<vector<int>>& arr) { 
//use arr 
} 
+0

実際、参照を取得するには関数を変更するのが理想的です。しかし、おそらく他にもいくつかの設計上の制約があります(それはおそらく仮想関数なのでしょうか?)、あるいは従来の習慣か、まったく平凡ではありません。 – TheUndeadFish

+0

@TheUndeadFish:または、著者の管理下にない他のコード( "習慣的な習慣"から "習慣"を差し引いたもの)とインターフェースするためには、この方法が必要です。 –

+2

@TheUndeadFish:コードのインターフェイスの完全性を維持することは、ほとんど「控えめ」です。 –

答えて

4

元のコードでは、引数はXのポインターになります。あなたのバージョンでは、タイプXとなります。

+0

簡単な説明が必要な場合があります。 –

+0

ベクトルを初期化して、最初の方法でこのコードを呼び出し、2番目の方法で結果が同じにならないのでしょうか?唯一の違いは私がそれを呼び出す方法です? – shawtynerd

+0

@shawtynerdはい。例外はFooがアプリケーションの別の部分にポインタを共有した場合です。 –

関連する問題