以下是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();
會被編譯器解析成函數聲明,而非變數宣告。