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

来源:互联网 发布:淘宝网店标志图片 编辑:程序博客网 时间:2024/05/22 14:21

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


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


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

operator new与malloc是对应的都只负责内存空间的分配,但是两者内存分配注册的方式不同。operator new操作失败之后会调用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释放空间.


原创粉丝点击