c++之动态内存管理

1.new/delete 和operator new/operator delete和malloc/free的关系

①new调用operator new分配空间②new调用构造函数初始化对象。
③delete调用析构函数清理对象 ④delete调用operator delete释放空间

⑤operator new/operator delete, operator new[]/operator delete[] 和 malloc/free用法一样

⑥operator new/operator delete只负责分配空间/释放空间,不会调用对象构造函数/析构函数来初始化/清理对象。 

⑦实际operator new和operator delete只是malloc和free的一层封装。

严格来说,new[]一定要多开4个字节(这个类型是否有必要调用它的析构函数)

new/delete动态管理对象。 new[]/delete[]动态管理对象数组。


2.new[]时底层处理的机制

调用operator new分配空间。

调用N次构造函数分别初始化每个对象

扫描二维码关注公众号,回复: 3863290 查看本文章

定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。 new (place_address) type new (place_address) type(initializer-list) place_address必须是一个指针,initializer-list是类型的初始化列表。 

3.new/delete和malloc/free的区别

①它们都是动态管理内存的入口②malloc/free是c/c++标准库的函数,new/delete是c++操作符

③malloc/free只是动态分配内存空间/释放空间,而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)

④malloc/free需要手动计算类型大小且返回值为void*.new/delete可以自己计算类型的大小,返回对应类型的指针.


猜你喜欢

转载自blog.csdn.net/qq_40408483/article/details/79851166