回答
因为这是C++设计的方式&这是预期的行为。
意图是提供一个内存分配,你需要和拥有,直到你明确地重新调整它。
new
给你一个动态内存分配(在堆上),它将继续存在,你拥有它,直到你明确地释放它,通过调用delete
。
未能在new
ed缓冲区上调用delete
将导致
到
未定义的行为通常以
的形式。 1内存泄漏。
哦,好吧我想这就是他们正在寻找的内存泄漏的想法,如果你不再次删除对象。 – Sebastian 2012-03-29 06:38:56
这是不正确的。没有未定义的行为来调用'delete',并且有些情况下(例如单例)你不想在'new'内存中调用'delete'。 – 2012-03-29 07:21:53
当您执行new
时,OS会将内存分配给您指定的指针。使用完成后,您可能不再需要它了。但内存仍被标记为“正在被操作系统”使用。
现在,当指针在函数或任何其他块({}
)的作用域中声明时,当块的执行结束时,它将被删除(只有指针将被删除)。在这种情况下,使用new
分配的内存仍被OS标记为“正在使用”,并且未分配给调用new
或变量的任何其他指针。这会导致RAM中的孤立内存块,永远不会被使用,因为它的指针已从内存中移除,但会占用内存块。
这被称为内存泄漏。一些这样的块可能会让你的应用程序不稳定。
您使用delete
释放这样的内存块,减轻操作系统,以便它可以为其它请求
有一个在C++没有垃圾收集器可以很好地使用,因此,你是负责释放所分配的内存。无论如何,操作系统“知道”你的程序分配了什么内存。所以当你的程序退出时,操作系统再次对内存负责。但是如果你有一个长时间运行的C++程序,并且从来不会调用delete,那么没有人会帮你摆脱垃圾。
您可以在C++中使用垃圾收集器。但是'delete'不仅仅是简单的内存管理,它也调用析构函数。即使使用垃圾收集器,通常也需要使用'delete'。 – 2012-03-29 07:24:26
调用new为对象分配了内存,并且还安排了该对象的构造函数被执行。
您可以通过调用free()来释放内存,但实际上应该使用delete来释放由new分配的内存,因为这也会导致对象析构函数被执行。
- 1. 如果您使用SSL,还需要使用摘要式身份验证吗?
- 2. 使用Solr,我还需要SQL db吗?
- 3. 使用AJAX请求时,我还需要Form元素吗?
- 4. 要求文件使用dirname(__ FILE__)还是只需要文件名?
- 5. 使用XmlRootAttribute类时需要刷新吗?
- 6. json需要使用“新”动作吗?
- 7. 要使Grails应用程序很好地扩展,您需要使用EJB吗?
- 8. 要调用需要IntPtr的方法,最好使用/ unsafe还是Marshal.AllocHGlobal?
- 9. 我需要使用NSLock吗?
- 10. 我需要使用NSKeyedArchiver吗?
- 11. 使用jQuery的$ Post时,您需要担心缓存吗?
- 12. 您是否需要使用Invoke on Action?
- 13. SimpleDateFormat - 您是否需要使用RegEx?
- 14. 当Apple要求强制使用https时,ios webview需要使用https吗?
- 15. 我们还需要Richter的AsyncEnumerator吗?
- 16. 您是否需要指定使用最新的框架版本?
- 17. 您需要使用theme.appcompat主题 - 但我是,不是吗?
- 18. Jquery Ajax调用需要暂停吗?
- 19. SqlCeResultSet.Close - 我需要调用它吗?
- 20. GLSurfaceView:我需要调用onPause/onResume吗?
- 21. 我需要在OCaml中调用Random.self_init吗?
- 22. RestoreDC之后需要调用TCanvas.Refresh吗?
- 23. 超时后我需要调用EndInvoke吗?
- 24. 如果我使用fonts.com,还是需要woff或eot吗?
- 25. 使用ARC时还需要释放任何内存吗?
- 26. CSS3:我们还需要使用浏览器前缀吗?
- 27. 对于FCGI,还需要使用'状态:404 Not Found'吗?
- 28. 我还需要在nodejs中使用'select ... for update'吗?
- 29. 我可以只使用会话吗?还是需要ACL?
- 30. 使用毕加索时,我还需要保存图像吗?
答案肯定会在你的书中。虽然有人可以(也将会)在此提供,但自己回答并不难。如果您已经这么做但想要确认,请编辑问题并告诉我们您为什么这么做。 – Jon 2012-03-29 06:37:11
我一直在寻找它,这只是讨论问题 – Sebastian 2012-03-29 06:37:50
我认为你的意思是“为什么”,而不是“什么”。 – Wyzard 2012-03-29 06:41:04