84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
以下是STL源码中的一段:
template <class _T1> inline void _Construct(_T1* __p) { new ((void*) __p) _T1(); }
平时看见的new,是类似这样的用法
_T1 * __p; __p=new _T1;
new ((void*) __p) _T1();和__p=new _T1;等同吗?而_T1()中的()又有什么特别含义吗?希望有人能帮忙解答!
new ((void*) __p) _T1();
__p=new _T1;
new(p) T是placement new。作用是在p指向的存储区上构造对象T。而一般的new会先申请存储区,然后在申请到的存储区上构造对象。
new(p) T
std::string str1; str1.~basic_string(); std::string *str2 = new(&str1) std::string("abc");
T()是值初始化,不等同于T。作用是依据类型T通过默认构造函数初始化对象或0初始化对象。
T()
T
int *p = new int(); assert(*p==0);
PS:之前犯了个错误,int a();会被编译器解析成函数声明,而非变量声明。
int a();
new(p) T
是placement new。作用是在p指向的存储区上构造对象T。而一般的new会先申请存储区,然后在申请到的存储区上构造对象。T()
是值初始化,不等同于T
。作用是依据类型T通过默认构造函数初始化对象或0初始化对象。PS:之前犯了个错误,
int a();
会被编译器解析成函数声明,而非变量声明。