new(p) T
是placement new。作用是在p指向的存储区上构造对象T。而一般的new会先申请存储区,然后在申请到的存储区上构造对象。
std::string str1;
str1.~basic_string();
std::string *str2 = new(&str1) std::string("abc");
T()
是值初始化,不等同于T
。作用是依据类型T通过默认构造函数初始化对象或0初始化对象。
int *p = new int();
assert(*p==0);
PS:之前犯了个错误,int a();
会被编译器解析成函数声明,而非变量声明。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…