C++中通过new和delete运算符进行动态内存管理 如图:
注意:new/delete、new[]和delete[]一定匹配使用
C库malloc/free等来动态管理内存,为什么C++还要定义new/delete运算符来动态管理内存呢?
因为:c语言是面向过程的语言,错误返回错误码,C++是面向对象的语言,错误要抛异常
malloc/free 只负责分配和释放空间,不会调用对象的构造和析构函数来对对象进行初始化和资源清理
new 调用operator new(相当于malloc)分配空间,调用构造函数初始化对象。
delete 调用析构函数清理对象,在调用operator delete(相当于free)释放空间
malloc/free是C/C++标准库函数,new/delete是C++操作符