malloc/free 与 new/delete的区别
区别:
new:只会调用一次构造函数,new申请的空间是单个类型的对象
new[]:申请的是一段连续的空间,会多次调用构造函数。
申请空间的方式必须与释放的方式成对使用:
new:(底层是对malloc函数的封装)
-
申请空间----->(底层) void operator new(size 字节数)
循环调用malloc(size)申请空间 -
调用构造函数
在申请的空间中调用构造函数
delete:(对free函数进行封装)
- 先调用析构函数
释放对象中的资源 - 释放空间 ---->(底层) void operator delete(void *p)
循环使用free函数,对资源进行释放。