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次构造函数分别初始化每个对象
定位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可以自己计算类型的大小,返回对应类型的指针.