6

重複の可能性:
どの種類のポインターをいつ使用するか?

C++11 のスマート ポインターを支持する多くの長所があります。それらはより安全であり、機能的であり、スコープがより明白であるなどです。

「古典的な」Cのようなポインタですか

class C{};
C c;
C* c_p = &c;

今は時代遅れ?それらは廃止されていますか?それとも、C ポインターがまだ意味をなすユースケースはありますか?

編集:スマート ポインターを使用したコード スニペット:

class C{};
C c;
std::shared_ptr<C> c_p(new C());

編集:重複を指摘してくれてありがとう。そこのXeoの答えから:

リソースへの非所有参照にダム ポインター (生のポインター) または参照を使用し、リソースが参照元のオブジェクト/スコープよりも長く存続することがわかっている場合。>ヌル可能性または再設定可能性が必要な場合は、参照を優先し、生のポインタを使用してください。

それがすべてである場合、この質問は終了したことを認めます。

4

3 に答える 3

13

生のポインタが意味を持つユースケースがあります。

最新のコードの生のポインターは、「所有していない」ポインターです。これは、指定されたオブジェクトの所有権を必要とする、または所有権を取得するようなことをコードで行うべきではないことを意味します。たとえばdelete、所有するスマート ポインターを構築するために使用したり、現在のコンテキストを超えて保存したりしないでください。

于 2012-07-23T06:43:38.277 に答える
9

絶対違う。スマート ポインターは、一般的な使用ではなく、特別な場合に使用されます。アプリケーションとプログラミング スタイルによっては、ほとんどのポインターは未加工のポインターのままです。実際、場合によっては、スマート ポインターがまったくないこともあります。

于 2012-07-23T07:34:52.043 に答える
4

いいえ、生のポインタは時代遅れではありません。必要でない限り、通常は使用しないことをお勧めします。生のポインターを介してオブジェクトの所有権を維持することは、覚えておく必要があるため、さらに推奨されませんdelete。これは、例外が存在する場合には困難になる可能性があります。

ロー ポインターはスマート ポインターよりもいくらか効率的であるため、パフォーマンスが重要なコードの一部で使用することは理にかなっています。線形代数などの一部の分野では、ポインター演算が役立つ場合があり、そこでは生のポインターを使用するか [1]、スマート ポインターのみを使用するのではなく、おそらくスマート ポインターと組み合わせて、生のポインターの上に新しい抽象化を構築します。 .

[1]サブマトリックスのビューを定義する場合など

于 2012-07-23T06:44:47.260 に答える