new和delete的一个注意事项
2010-01-13 16:52
148 查看
问题:
问题补充:
提问者: 皇家救星1985
- 九级
最佳答案
#include <windows.h> class myint { int a; }; int main() { /* 在用delete释放对象数组时,留意不要丢了符号‘[]’。例如 delete []objects; // 正确的用法 delete objects; // 错误的用法 后者相当于delete objects[0],漏掉了另外99个对象。 */ while(1) { myint *a = new myint[100]; //delete []a; delete a; //为什么此处加不加[]都不会造成内存泄漏? //从任务管理器中可以看出,占用内存不会增大 Sleep(1); } return 0; } ------------------------------------- 请问这是怎么回事?delete a;和delete []a;效果是一样的
问题补充:
谢谢回答 我用的是VC6.0 程序如果没有delete从任务管理器可以很明显地看出内存增长 但如果加上后就不会了 观察了好久都没事 改了还是一样没事,我怀疑是编译优化的问题。下面是 mying *a = new myint[100]; delete []a; delete a; 的汇编,高手能帮忙解释一下吗? 由于字数限制,我贴到4L了(kingstarer) ----------------------------------- to dingpwen:您说的现象我也发现了,但问题是我没有完全释放内存的话为什么系统会分配一个已使用的内存给我,而如果内存是完全释放了,那就是我的问题delete和delete []效果是一样的 我想应该是后者的可能性更大一些吧?您觉得呢?
提问者: 皇家救星1985
- 九级
最佳答案
查了下书, delete负责调用 类的析构函数的。 普通的对象的delete 和delete{]确实是一样的。 当类中有析构函数的时候,你就看到不同了。编译器根据是delete还是delete『} 来生成调用不同次数的 析构函数。而如果还是用delete来删的话,运行时就会出错了。试一下下面这个代码: #include<iostream> using namespace std; #include<stdio.h> #include<stdlib.h> #include <windows.h> class myint { int a; public: ~myint(){ cout << "ddd/n"; } }; int main() { /* 在用delete释放对象数组时,留意不要丢了符号‘[]’。例如 delete []objects; // 正确的用法 delete objects; // 错误的用法 后者相当于delete objects[0],漏掉了另外99个对象。 */ //while(1) //{ myint *a = new myint[2]; //delete []a; delete[] a; //为什么此处加不加[]都不会造成内存泄漏? //从任务管理器中可以看出,占用内存不会增大 //Sleep(1); //} int num; cin >> num; return 0; }
相关文章推荐
- new与delete函数使用方法以及注意事项
- new与delete函数使用方法以及注意事项
- C++中new,delete使用注意事项
- C++开发DLL中使用new和delete注意事项
- new与delete函数使用方法以及注意事项
- 关于MySql查询一个时间段的注意事项
- 调用C#版gdal库的一个注意事项
- 我也再补充一个NANT使用注意事项
- 在把网站定义一个根目录为常量时要注意的事项
- 对象析构谈—— delete this 的使用及注意事项
- ExtJS使用时的一个注意事项
- android分享到微信朋友圈的一个回调接口的注意事项
- JavaScript中Array.prototype.map使用的一个注意事项
- 使用WTL::CBitmap时需要注意的一个事项
- JavaScript中的new的使用方法与注意事项
- java Integer.valueOf 和 Integer.parseInt 和 new Integer区别及注意事项
- 关于STM32定时器使用的一个注意事项(以此为前车之鉴,重要!)
- 关于libjpeg或libjpeg-turbo使用中的一个注意事项
- C++构造函数中使用new时应注意的事项!
- 对象析构谈—— delete this 的使用及注意事项