- new operator(new的表达式):string *str = new string("abcde") 既分配内存也初始化对象
- operator new(new的操作符):void *buff = operator new(sizeof(string)) 类似于malloc 只分配空间不进行初始化
- placement new:void *buff = operator new(sizeof(string)); buff = new(buff) string("abcde"); 对现有的buff空间进行初始化string类型的对象。
网易笔试题目:
C++中的new操作符通常完成两个工作,分配内存及其调用相应的构造函数初始化
请问:
1) 如何让new操作符不分配内存,只调用构造函数?
2) 这样的用法有什么用?
- 使用定位放置new
- #include <new> // 必须 #include 这个,才能使用 "placement new"
- #include "Fred.h" // class Fred 的声明
- void someCode()
- {
- char memory[sizeof(Fred)]; // Line #1
- void* place = memory; // Line #2
- Fred* f = new(place) Fred(); // Line #3 (详见以下的“危险”)
- // The pointers f and place will be equal
- // ...
- }
- 作用为:对于需要反复创建并删除的对象,可以降低分配释放内存的性能消耗