cari

Rumah  >  Soal Jawab  >  teks badan

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

以下是STL源码中的一段:

1

2

3

4

<code>template <class _T1>

inline void _Construct(_T1* __p) {

 new ((void*) __p) _T1();

}</code>

平时看见的new,是类似这样的用法

1

2

<code> _T1 * __p;

 __p=new _T1;</code>

new ((void*) __p) _T1();

__p=new _T1;
等同吗?
而_T1()中的()又有什么特别含义吗?希望有人能帮忙解答!

巴扎黑巴扎黑2827 hari yang lalu715

membalas semua(1)saya akan balas

  • 高洛峰

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

    new(p) T是placement new。作用是在p指向的存储区上构造对象T。而一般的new会先申请存储区,然后在申请到的存储区上构造对象。

    1

    2

    3

    <code class="cpp">std::string str1;

    str1.~basic_string();

    std::string *str2 = new(&str1) std::string("abc");</code>

    T()是值初始化,不等同于T。作用是依据类型T通过默认构造函数初始化对象或0初始化对象。

    1

    2

    <code class="cpp">int *p = new int();

    assert(*p==0);</code>

    PS:之前犯了个错误,int a();会被编译器解析成函数声明,而非变量声明。

    balas
    0
  • Batalbalas