cpp-book icon indicating copy to clipboard operation
cpp-book copied to clipboard

new/deleteの再考

Open yumetodo opened this issue 5 years ago • 1 comments

https://rinatz.github.io/cpp-book/ch06-02-new-and-delete/ でnew/deleteの解説がされています。

解説文で

new を利用して確保したメモリの解放を忘れるとメモリリークになります。 new と delete は必ずセットで使いましょう。

と書いているにもかかわらず、そのすぐ上のサンプルコードはメモリーリークしています(p1が開放されない)。

int* p1 = new int(100);
int* p2 = new int[5];// MEMORY LEAK!!!!!

delete p1;    // new によって確保されたメモリを delete で解放
delete[] p2;  // 配列の場合は [] を付ける

現代のC++において、動的メモリー確保はまずstd::vector/std::stringのようなコンテナの利用を検討し、次にstd::unique_ptr、その次にstd::shared_ptrの利用を検討するべきでnew/deleteを使う場面はただの一ミリも存在しません。

new/deleteをただしく扱うことは人類には不可能であることは明らかであり、解説の必要性そのものを再考するべきと考えます。

yumetodo avatar Nov 24 '20 06:11 yumetodo

現代のC++において、動的メモリー確保はまずstd::vector/std::stringのようなコンテナの利用を検討し、次にstd::unique_ptr、その次にstd::shared_ptrの利用を検討するべき

基本的には同意です。が、本サイトが前提とするC++11時点では std::make_unique関数テンプレート が存在しないため、素直にC++14機能を利用するか、自分でヘルパ関数を書く必要があります。

解説の必要性そのものを再考するべき

new/deleteという言語機能の解説は簡素に済ませ、よりモダンで安全な代替案を紹介するほうが建設的かと思います。

yohhoy avatar Nov 27 '20 07:11 yohhoy