Effective_C++:3、尽量以new和delete取代malloc和free

3、尽量以new和delete取代malloc和free

1、malloc和free

        malloc和free是C语言中申请和释放动态内存的函数,malloc申请在堆上寻找一块指定大小的内存,返回一个void类型的指针,指向该内存的首地址;若申请失败则返回空指针NULL。程序结束,需要使用free()调用之前的指针来释放之前申请的动态内。

2、为啥要取代malloc和free

        C++与C的区别之一是C是面向过程的编程,而C++是面向对象的。C++中,会自定义很多类class,每个类都有自己的构造函数与析构函数来创建和销毁对象。而用malloc对这些类对象进行动态内存申请时,他可以申请指定大小的内存,但是不会调用类的构造函数,这给对象的初始化带来了困难。
string *stringArray1 = static_cast<string *>(malloc(10 * sizeof(string)));

如上,申请了10个string对象的内存,地址保存在stringArray1中。没有调用构造函数,没有进行对象的初始化,无法对这块内存欲要保存的对象进行初始化。

        同样,用free对这些类对象进行动态内存释放时,不会调用类的析构函数。也就是说,他只是释放了指针指向的这块内存,没有通过调用析构函数合法的销毁对象,对对象的本身配置的内存没有操作,可能导致内存泄漏。

3、以new和delete取代malloc和free

        用new和delete操作符是C++实现申请和释放动态内存的一种方法,他们在申请和释放动态内存的同时,会调用类的构造函数和析构函数,比malloc和free更方便。

        另外,混用new、delete和malloc、free时,可能引发未知的错误,或给代码的阅读、维护带来一定的困扰。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值