C++为什么不建议使用malloc,calloc,realloc来分配内存?
来源:互联网 发布:马里亚纳网络是什么 编辑:程序博客网 时间:2024/04/28 02:32
为什么C++中不建议使用malloc calloc realloc等C语言函数?因为:这样分配的空间,返回的指针需要通过free来释放,但free释放空间不同于delete,free不会执行析构函数!
/* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */#include <iostream>#include <cstdlib>#include <memory>class A {public: A() { std::cout << "create A" << std::endl; } A(const A& o) { std::cout << "copy A" << std::endl; } ~A() { std::cout << "delete A" << std::endl; }};/* * */int main(void) { char* buf1 = (char*) malloc(10); // char* buf2 = (char*) calloc(1, 10); // 效果虽然与上面一样,不同的是,calloc会将空间初始化为0. free(buf1); free(buf2); std::cout << "---------------------------" << std::endl; // 为什么C++中不建议使用malloc calloc realloc等C语言函数?因为:这样分配的空间,返回的指针需要通过free来释放,但free释放空间不同于delete,free不会执行析构函数! A* ap = (A*) malloc(sizeof (class A) * 10); std::uninitialized_fill_n(ap, 10, A()); free(ap); // 调用1次create A ,1次delete A 10次copy A return 0;}
---------------------------
create A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
delete A
虽然实例程序,对空间的分配释放没有任何错误,但在某些情况,比如A类的析构伴随着某些特殊处理,将导致程序异常!
- C++为什么不建议使用malloc,calloc,realloc来分配内存?
- C语言内存分配:malloc、calloc、realloc
- C语言内存分配--malloc、calloc、realloc
- 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
- 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
- C语言三个内存分配函数比较,malloc calloc realloc
- C语言 内存分配 (malloc/realloc/calloc区别)
- 转载:C语言内存分配:malloc、calloc、realloc
- C语言动态内存分配malloc/realloc/calloc
- C语言动态内存分配 malloc .calloc realloc
- C中标准内存分配函数realloc,malloc,calloc
- [转载]C语言动态内存分配malloc/realloc/calloc
- C语言内存分配函数malloc、calloc和realloc
- linux C 之动态内存分配malloc ,calloc,realloc,free
- C语言内存分配calloc,malloc,alloc,realloc的区别
- C中分配内存malloc、calloc和realloc
- llinux -c 之动态内存分配函数(malloc、calloc、realloc)
- C语言中动态内存分配 malloc realloc calloc 的使用和比较
- 【Ubuntu】用vim来合并两个文件的命令
- ios存储数据的几种方式
- struct 和 union
- C# String.Format格式说明
- NetTerm 使用简介
- C++为什么不建议使用malloc,calloc,realloc来分配内存?
- 使用NetworkInterface类获得网络接口信息
- unistall
- 苹果的冷漠已渐渐照出诺基亚的影子
- [转]浅谈php web安全
- 各种类型nosql数据库对比
- FLOAT类型的值域
- 脚本监控mysql数据库锁表并报警
- BroadcastReceiver基本使用