首頁  >  問答  >  主體

C++的STL中关于new的用法,求帮忙!

以下是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()中的()又有什么特别含义吗?希望有人能帮忙解答!

巴扎黑巴扎黑2715 天前643

全部回覆(1)我來回復

  • 高洛峰

    高洛峰2017-04-17 15:41:53

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

    回覆
    0
  • 取消回覆