一般的なプログラミングでは、はい、とを使用する必要がnew
ありdelete
ます。
ただし、ライブラリを作成している場合は、作成しないでください。私はあなたの教科書を持っていませんが、それは図書館のコードを書くという文脈でアロケータについて議論していると思います。
ライブラリのユーザーは、何がどこから割り当てられるかを正確に制御したい場合があります。ライブラリのすべての割り当てが実行されnew
たdelete
場合、ユーザーはそのきめ細かいレベルの制御を行う方法がありません。
すべてのSTLコンテナは、オプションのアロケータテンプレート引数を取ります。コンテナは、内部メモリのニーズに合わせてそのアロケータを使用します。デフォルトでは、アロケータを省略すると、 and (具体的には、 )std::allocator
を使用するアロケータが使用されます。new
delete
::operator new(size_t)
::operator delete(void*)
このようにして、そのコンテナのユーザーは、必要に応じてメモリがどこから割り当てられるかを制御できます。
STLで使用するためのカスタムアロケータの実装例と説明:STL用のカスタムプールアロケータによるパフォーマンスの向上
補足:アロケータへのSTLアプローチは、いくつかの点で最適ではありません。これらの問題のいくつかについては、「より良いアロケータモデルに向けて」を読むことをお勧めします。
2019年の編集:この回答が書かれてから、C++の状況は改善されました。ステートフルアロケータはC++11でサポートされており、そのサポートはC++17で改善されました。「より良いアロケータモデルに向けて」に関与した人々の何人かはそれらの変更に関与したので(例:N2387)、それは素晴らしいことです(: