我想知道在C++中由“删除”运算符销毁的内存会发生什么情况。 以这种方式“销毁”记忆意味着将给定的记忆片段设置为0或其他东西?在C++中,删除操作符意味着'销毁'内存?
回答
它破坏(如在呼吁有关析构函数)传递给delete
对象实例,然后“释放”的内存中,因此它可以被用于其它目的。
C++标准没有说明在delete
之后内存的内容是什么,它肯定不能保证为零或任何其他值 - 也不能保证它不为零 - 它可能是零,它可能保留以前的所有价值,或者其中一些部分可能会被改变,而其他部分可能会保持不变。
C和C++作为语言的目标是“只做最低限度的必要”,因此典型的免费内存不会覆盖“旧”内存。
你可以使用析构函数中的代码将内存设置为零,然后释放它。
由于在删除内容后不应使用内存,因此这应该不是问题。
推荐memset是最好的bug源。你所说的V-tables(C++没有指定的东西,它只是一种实现技术)对所有的类成员都是有效的:如果它们是非平凡的对象,它们也有必须在class dtor返回。如果你消除了记忆,你会误导一切。 – 2013-04-27 12:57:46
好的,删除了memset的建议,因为很难解释它什么时候可以使用也无法使用 - 无论如何,通常这样做是毫无意义的。 – 2013-04-27 13:03:20
千万不要使用它。 C++管理对象,而不是内存。除非你正在编写一个原始分配器类(a-la'std :: allocator')或者重写'new' /'delete',否则你不应该将内存作为“裸机”来连接。 – 2013-04-27 13:23:04
delete
只是释放内存(以前由new
分配),并且在某些对象已存储在此内存中的情况下,也会调用析构函数。
delete
不会更改指针的值,也不会修改已释放的内存,因此您会注意到很多人在调用delete
后才会将NULL
指定给该指针,以确保它们将不会导致无效(悬挂)指针,其产生未定义的行为。
值得去看一看:Is it good practice to NULL a pointer after deleting it?
不,这并不意味着将存储器设置为任何特定值+。内存只是回到可以重用的值堆中。运行时通常使用返回块的几个字节来存储“簿记”信息,但它们不会将整个块设置为特定值。一旦内存块被重用,它就是你的程序设置它的新值。
+有内存分析工具,让您设定内存释放一些“垃圾”的价值观,以确保你得到一个崩溃得更快。
- 1. <%操作符在Scala泛型中意味着什么?
- 2. 在C中初始化内存为零意味着什么?
- 3. 在C++中重载删除操作符
- 4. C++删除操作符
- 5. [](){}构造在C++中意味着什么?
- 6. #pragma在C中意味着什么?
- 7. 在C++中意味着什么?
- 8. @符号在java中意味着什么?
- 9. C#方法意味着
- 10. [Bindable]在动作中意味着什么?
- 11. 在AngularJS中结尾意味着什么double意味着
- 12. iPhone操作系统内存警告。不同层次意味着什么?
- 13. 是否删除容器在GTK内存中的小部件中销毁
- 14. Android:onBackPressed()销毁所有内存?
- 15. %12.10lg在C++字符串格式化中意味着什么
- 16. 什么是({});意味着在C++?
- 17. Objective-C中的@意味着什么?
- 18. C++中的〜意味着什么?
- 19. preg_match中的符号意味着什么?
- 20. 在软件操作方面,“代价高昂”意味着什么?
- 21. C++中的删除操作如何知道要删除多少内存位置
- 22. 差异意味着
- 23. {} \;意味着在unix命令?
- 24. [`something] some_vector;意味着在verilog?
- 25. 什么===在PHP意味着
- 26. -Xms JVM在引用堆内存时意味着什么?
- 27. 在这种情况下WaitGroup.Wait()意味着内存屏障吗?
- 28. “回读”在计算机内存方面意味着什么?
- 29. 什么__section()意味着Linux内核源
- 30. '删除指针'是否意味着'*指针= 0'?
看看这个http://www.cplusplus.com/reference/new/operator%20delete%5B%5D/ – 2013-04-27 11:27:18
我认为这是一个很好的问题,因为标准本身似乎有点不清楚什么确切的说是“破坏”。它说C++的构造被用来创建,销毁和操纵对象,而对象则是存储区域。然而,它也表示析构函数用于销毁对象,但我们可以明确地调用析构函数并仍然有可用的存储区域。 (也许我正在对待这个问题的深度比它真正要求的更高) – 2013-04-27 11:33:08
@Armin好的,我看了看,thx。 – Zygmuntix 2013-04-27 11:33:37