`
wsql
  • 浏览: 11775068 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C++/C动态内存分配的区别

 
阅读更多

C++使用new和delete,C语言使用malloc和free进行动态内存的管理,主要区别有以下几点:


1、new分配的内存空间是带有类型的,而malloc分配的空间类型是void*。


new进行内存分配时,首先调用operator new分配内存空间,然后用placement new调用对应的构造函数创建对象。

operator new与malloc是对应的都只负责内存空间的分配,但是两者内存分配注册的方式不同。operatornew操作失败之后会调用new_handler函数处理,而malloc只会返回null不作处理。operator new可以被重载。

placement new用于定位构造函数,在指定的内存地址上用指定类型的构造函数构造对象。
例如:new(ptr) Test("hello");// ptr->Test::Test("hello");


2 、delete首先调用析构函数,然后operator delete释放内存空间,free直接释放内存空间。


我们可以利用malloc+placement new来构建自己的内存管理模块,创建对象时,通过malloc申请一个内存块,然后调用placement new来完成对象的初始化;释放对象时,首先调用对象的析构函数,然后通过free释放空间.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics