1

私は Java でかなりのプログラミングをしており、以前は C++ にも手を出していました。私はさまざまな C++ の本でポインターについて読み、本でさまざまな例を作成しました。

ポインターの基本は理解していますが、1 つのことが明確ではありませんでした。ポインターの実際のアプリケーションは何ですか? つまり、参照渡しよりもポインターを使用する方が有益な状況はどのようなものでしょうか (Java のように)。

4

2 に答える 2

9

つまり、参照渡しよりもポインターを使用する方が有益な状況はどのようなものでしょうか (Java のように?)

Java やその他の多くの言語での参照は、基本的にはポインタ上の抽象化です。C (C++ ではない) では、抽象化が存在しなかったため、参照を使用して C++ でできるように「参照渡し」する方法がなかったため、これは決して可能ではありませんでした。C++ は、新しい抽象化として参照を追加しました。

C++ では、参照渡しが可能であり、多くの場合、それが好まれます。ただし、実際の動的メモリ割り当ては、ある程度のレベルでは引き続きポインターで機能します。

そうは言っても、C++ でポインターを使用して実行できることはいくつかあり、これにより効率が向上します。メモリとそこに格納されているものについて知ることで、一部の言語で得られる抽象化のオーバーヘッドなしで、そのデータを直接操作できます。これは「安全」ではありません (何か危険で悪いことをするのは簡単です) - しかし、しばしば役に立ちます。(C# などの一部の言語でもこれを実行できるので便利ですが、許可するにはそのコードを明示的に「安全でない」とマークする必要があります。)

そうは言っても、ポインターは通常、C++ で抽象化されています。 スマート ポインターは、"生の" ポインターを使用することによる副作用や危険性を伴わずに、多くの同じ利点を提供します...

于 2012-06-07T20:44:48.827 に答える
0

(少なくとも私にとって)主な違いは、どちらかを選択する時間です。ポインター演算を行うか、それに NULL 値を割り当てる必要がある場合は、ポインターを使用するか、それ以外の場合は参照に固執する必要があると思います。彼らは仕事をします。

于 2012-06-07T20:43:23.830 に答える