最近、私は C++ のポインターに手を出しています。私が読んだことによると、ポインター変数は、変数を参照 (VB の ByRef と同様) または関数ポインター (C# のデリゲート) で渡すために使用されます。ポインターの使用はこれらの例に限定されないことは確かです。ポインターが必要なアプリケーションを知りたいと思っていました。ネット上のほとんどのチュートリアルでは、参照による受け渡しの使用法を説明しようとしています。事前に感謝し、初歩的な質問で申し訳ありません:)
3 に答える
一般に、他のオプションがない場合にのみポインターを使用できます。たとえば、C では、変数を「参照によって」関数に渡す方法はありません。
また、ポインターのない C++ では、実行時のポリモーフィズムを実際に実現することはできません。
注意として、C++ でプログラミングしている場合は、スマート ポインターから学習を開始する必要があります。
http://en.wikipedia.org/wiki/Smart_pointer
スマート ポインターはポインターと同等ですが、より安全です。
以下は、C++ スマート ポインターを使用するための優れたチュートリアルと演習です。
http://www.ida.liu.se/~TDDD38/exercises/Smart_Pointer_II/Smart_pointer_II-11-en.pdf
ポインターを使用する理由はいくつかあります。最も明白なものの 1 つは、オプションの引数です。
void f(int a, int const* b = NULL);
を使用すると、 が nullf
かどうかをテストb
し、その結果に基づいて行動できます。
ポインターを使用するもう 1 つの非常によくある理由は、ナビゲーションです。たとえば、オブザーバー パターンを見たいと思うかもしれません。しかし、オブジェクト間をナビゲートする必要がある他の多くのケースがあります (動的に変化する関係を持つ)。
最後に、オブジェクトが動的に割り当てられるときにポインターが使用されます。これは、C# や Java などの言語 (基本的にすべて、またはほとんどすべてを動的に割り当てる) ほど頻繁ではありません。C++ では、何かを動的に割り当てる通常の理由は、オブジェクトがコピー可能ではなく (ID を持っている)、プログラムのスコープから独立した有効期間を持つためです。もう 1 つの理由は、動的トポロジを持つオブジェクト内のサブオブジェクトです。たとえば、グラフのノードなどです。ポリモーフィズムも理由になる場合があります。オブジェクトの実際のタイプが実行時の条件に依存する場合は、動的に割り当てる必要があります。