Boost のスマート ポインターに関する記事を読みました。
「scoped_ptrは生のポインターに適していますが、 scoped_arrayは動的配列に役立ちます。」
しかし、「生のポインター」の意味がわかりませんでした。
どなたか説明していただけませんか?ありがとう
Boost のスマート ポインターに関する記事を読みました。
「scoped_ptrは生のポインターに適していますが、 scoped_arrayは動的配列に役立ちます。」
しかし、「生のポインター」の意味がわかりませんでした。
どなたか説明していただけませんか?ありがとう
彼らの言葉遣いは残念です。「生の」ポインターとは、通常、何を指すかに関係なく、プリミティブ ポインター型を意味します。それらの意味は次のとおりです。
scoped_ptr は単一オブジェクトへのポインタに適していますが、scoped_array は動的配列に役立ちます
生のポインターは、次の言語構文によって導入されるポインターです*
。
int* ptr;
これは通常の POD (メモリ内の「生の」数値アドレス) 変数であるため、簡単に破棄されます。生のポインターについて重要で面倒なことは次のとおりです。
int* ptr = new int(42);
の破壊はptr
ノーオペレーションであるdelete
ため、呼び出されず、手動で行う必要があります。スマート ポインターは生のポインターをラップし、ポイントされているオブジェクトを破棄します (必要な場合)。
unique_ptr
C++11 では、との形式で標準ライブラリにスマート ポインターが導入されましたshared_ptr
。C++11 を対象とする場合は、boost の代わりにこれらを使用する必要があります。
配列の言及は、配列を最初の要素へのポインターとして表現できるという事実と、サイズの概念に由来しています。たとえば、char*
は配列の最初の文字へのポインターであり、 で終わることがわかっています'\0'
。このような配列の動的割り当てはnew[]
operator (および による破棄delete[]
) によって行われます。標準ライブラリのスマート ポインターもこれらの型を処理できますが、一般的にstd::vector
は代わりに を使用することをお勧めします。