资源释放 delete[]
来源:互联网 发布:cloudlink mac客户端 编辑:程序博客网 时间:2024/06/05 12:03
问题:
char *p = new char[256];
delete p;
delete[] p;
以上两种delete,哪个正确?
回答:
以上两种delete都正确,但是最好用 delete []p;
因为 对于 char *p delete p 和 delete[] p 没有区别
但是 如果是 class *p 的话 delete p只对 p[0]析构 而 delete[] p会对 数组中所有的class 析构
必须要有‘[]’符号用以告诉编译器,指针(此处当然是你的p)所指向的是数组,因此在释放pc所指向的内存区块时必须要查询和使用该数组的维度信息,这样才能完全释放p所指的数组占用的内存资源。C++编译器出于效率上的考虑,仅在有‘[]’时,才会查询数组的维度信息。否则,编译器将认为p指向的是单个内存单元,因而delete掉p所指向的单个内存单元造成内存资源泄漏。至于有些朋友有意对数组的delete操作不用‘[]’而没有觉得程序的运行有异常,但我要告诉你们:"内存资源确时已经发生了泄漏!!!只是你的程序规模较小,且运行在一个碰巧相对安全的内存空间,以至你没有发现异常现象而以!"
请参考《C++ Common Knowledge》-条款36-page93。
另外,还可从另一角度说明'delete[]p'与'delete p'存在区别的重要性:
我想大家一定知道,很多C++大师在大谈著名的auto_ptr<typename T>好处的时候,总会明确的告誡使用者,不要把它用于数组!
即你不能如下使用auto_ptr:
char* _parray = new char[100];
auto_ptr<char> _parray(_p);//哎呀!......
为什么呢?就正是因为auto_ptr的析构函数中使用"delete _p;"而不是"delete []p;"!这样,在_parray生命终止后将造成内存泄漏!
- 资源释放 delete[]
- delete释放
- 资源释放
- 释放资源
- 释放资源
- 释放资源
- 释放资源
- 释放资源
- 资源释放
- delete 与 delete[] 释放内存
- delete 与 delete[] 释放内存
- 使用delete释放内存
- delete-释放对象语法。
- delete内存释放机制
- 释放对象数组:delete与delete[]
- 释放对象数组:delete与delete[]
- 释放对象数组:delete与delete[]
- free/delete 释放的内存大小?
- TPopupMenu 控件
- MFC MDI 程序启动时不显示子窗口
- Windows 下安装Mysql 5.7 压缩包
- sublime Text2 GBK支持
- 8个经过证实的方法:提高机器学习模型的准确率
- 资源释放 delete[]
- 在非越狱手机上进行App Hook
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- newInstance() 和 new 有什么区别?
- 继续添加,确认删除,弹出对话框,跳转
- 微博移动端所获数据各字段的含义
- Android自带的时间空间和日期控件
- php输出各函数的区别
- java设计模式:动态代理模式 Proxy