面试(十一)new与delete(整理) 及 内存泄露
c语言经常使用的是free与malloc,而c++又引入了new和delete它们的区别是什么呢?
内置类型
对于内置类型来说,free和delete、malloc和new几乎没什么区别,但如果是连续的空间,malloc和free只能申请和释放一块空间的内容,而new[] 和 delete[] 可以申请和释放一段连续的空间。而且new在申请空间失败后会抛出异常,malloc申请空间失败后会返回NULL(空指针)
自定义类型
new
new是先调用operator new来开辟对应的内存空间
接着在这块内存空间中调用构造函数,完成对对象的构造
delete
先调用析构函数对该空间上的对象资源进行清理
接着使用operator delete来完成对内存空间的释放
new T[N]
首先调用operator new完成N个对象空间的申请
然后在这块空间上调用N次构造函数
delete []
首先调用N次析构函数,对对象资源进行清理
然后调用operator delete完成对这块内存空间进行释放
🍑 malloc/free 和 new/delete 的区别
它们的共同点是:都是从堆上申请空间,并且需要用户手动释放。
不同的地方是:用法上 和 底层上 的区别
malloc 和 free 是函数