c++: new, delete, malloc, free的匹配使用
来源:互联网 发布:数据审计追踪 编辑:程序博客网 时间:2024/05/19 19:55
cplusplus: new, delete, malloc, free的匹配使用
今天师姐项目调试时遇到问题, 跑来问我:
为什么用new申请的内存, 用free释放有时候没问题, 有时候又有问题呢?
在C++中, 我们可以用new和malloc申请空间, 用delete和free释放空间。
malloc和free只对内存块进行操作, 而new和delete除了对内存块进行操作,
还会调用构造/析构函数(如果是类空间)。
而类里的成员变量, 可能是指针或句柄, 其实际指向的资源, 并不在类的内存块中。
这时贸然使用free释放, 就会产生内存泄露。
当然, 如果内存块中存储的是基本数据类型, 使用delete和free都不会有内存泄露。
只是这样的写法并不规范。
规范的写法是:
new与delete, new[]与delete[], malloc和free对应使用。
示例代码
使用VLD检测内存泄露,情况3存在内存泄漏
#include <cstdlib>#include <iostream>#include <vld.h>#pragma comment(lib, "vld.lib")class Hand{public: void* handle; Hand() : handle(nullptr) {} ~Hand() { if (handle != nullptr) free(handle); } void memory() { if (handle == nullptr) handle = malloc(100); }};int main(){ // condition 1: malloc and free { Hand* handle = reinterpret_cast<Hand*>(malloc(sizeof(Hand))); free(handle); } // condition 2: new and free (without memory) { Hand* handle = new Hand(); free(handle); } // condition 3: new and free (with memory allocation) { Hand* handle = new Hand(); handle->memory(); free(handle); }}
参考链接
- new: http://www.cplusplus.com/reference/new/operator%20new/
- delete: http://www.cplusplus.com/reference/new/operator%20delete/
- free: http://www.cplusplus.com/reference/cstdlib/free/
0 0
- c++: new, delete, malloc, free的匹配使用
- malloc free和new delete的使用
- C/C++内存使用之malloc/free,new/delete
- [C/C++] malloc/free和new/delete的区别
- c/c++中malloc/free和new/delete的区别
- C++malloc/free和new/delete
- C/C++中new/delete malloc/free
- C++中malloc/free和new/delete 的使用
- new/delete和malloc/free的使用场合和区别
- new delete malloc free
- malloc/free new/delete
- malloc, free, new , delete
- new delete malloc free
- new,delete, malloc, free
- new delete malloc free
- new/delete malloc free
- malloc/free/new/delete
- new delete malloc free
- MongoDB C++ Driver 使用入门
- Informix11.70培训笔记(2)
- 括号配对问题
- composer install中出现的用户名错误解决办法
- Ubuntu修改桌面大小
- c++: new, delete, malloc, free的匹配使用
- VS2010出现“为帮助内容存储区指定的位置无效或者您无权访问该位置”的解决办法
- CollapsingToolbarLayout简单应用
- Introducing Kafka Streams: Stream Processing Made Simple
- Redis的分片、预分片技术总结
- codeforces No to Palindromes!(字符串处理,不能有回文)
- 2016多校联合第二场 HDU5739 Fantasia 解题报告
- java使用ajax实现进度条
- hdoj 1085 Holding Bin-Laden Captive! <思维>