初始化c ++堆对象

kyk*_*yku 1 c++ new-operator

我想知道在使用new的堆上创建的对象中的内置类型是否会被初始化为零?它是由标准强制要求还是特定于编译器?

给出以下代码:

#include <iostream>

using namespace std;

struct test
{
    int _tab[1024];
};

int main()
{
    test *p(new test);

    for (int i = 0; i < 1024; i++)
    {
        cout << p->_tab[i] << endl;
    }

    delete p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行时,它会打印全部为零.

Mik*_*our 11

您可以选择是否要进行默认初始化,使基本类型(和一般的POD类型)保持未初始化,或者初始化为零,从而对基本(和POD)类型进行零初始化.

int * garbage = new int[10];    // No initialisation
int * zero    = new int[10]();  // Initialised to zero.
Run Code Online (Sandbox Code Playgroud)

这是由标准定义的.