Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new/deleteの再考 #63

Open
yumetodo opened this issue Nov 24, 2020 · 1 comment
Open

new/deleteの再考 #63

yumetodo opened this issue Nov 24, 2020 · 1 comment

Comments

@yumetodo
Copy link
Contributor

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をただしく扱うことは人類には不可能であることは明らかであり、解説の必要性そのものを再考するべきと考えます。

@yohhoy
Copy link

yohhoy commented Nov 27, 2020

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

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants