1

Boost のスマート ポインターに関する記事を読みました。

scoped_ptrは生のポインターに適していますが、 scoped_arrayは動的配列に役立ちます。」

しかし、「生のポインター」の意味がわかりませんでした。

どなたか説明していただけませんか?ありがとう

4

2 に答える 2

2

彼らの言葉遣いは残念です。「生の」ポインターとは、通常、何を指すかに関係なく、プリミティブ ポインター型を意味します。それらの意味は次のとおりです。

scoped_ptr は単一オブジェクトへのポインタに適していますが、scoped_array は動的配列に役立ちます

于 2013-08-07T12:26:07.840 に答える
1

生のポインターは、次の言語構文によって導入されるポインターです*

int* ptr;

これは通常の POD (メモリ内の「生の」数値アドレス) 変数であるため、簡単に破棄されます。生のポインターについて重要で面倒なことは次のとおりです。

int* ptr = new int(42);

の破壊はptrノーオペレーションであるdeleteため、呼び出されず、手動で行う必要があります。スマート ポインターは生のポインターをラップし、ポイントされているオブジェクトを破棄します (必要な場合)。

unique_ptrC++11 では、との形式で標準ライブラリにスマート ポインターが導入されましたshared_ptr。C++11 を対象とする場合は、boost の代わりにこれらを使用する必要があります。

配列の言及は、配列を最初の要素へのポインターとして表現できるという事実と、サイズの概念に由来しています。たとえば、char*は配列の最初の文字へのポインターであり、 で終わることがわかっています'\0'。このような配列の動的割り当てはnew[]operator (および による破棄delete[]) によって行われます。標準ライブラリのスマート ポインターもこれらの型を処理できますが、一般的にstd::vectorは代わりに を使用することをお勧めします。

于 2013-08-07T12:20:01.317 に答える