84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
以下是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();
会被编译器解析成函数声明,而非变量声明。