已分配的阵列已归零

Car*_*s00 4 c++ memory-management c++11

在C++ 11中,当我使用T *array = new T[n];它已经归零时使用动态数组(使用gcc 4.7.2,Ubuntu 12.10 64bit).

  1. 这是否受C++ 11规范的限制?
  2. 如何在不归零其项目的情况下分配数组?这可能会快一点.

编辑:我已经检查过了T = int.

gcc cxx-flags:-std=gnu++11 -O3 -ffast-math -fno-rtti

ipc*_*ipc 6

§5.3.4

如果省略new-initializer,则默认初始化对象(8.5); 如果没有执行初始化,则该对象具有不确定的值.

new-initializer是()in new T[] (),你省略了.

§8.5/ 6

默认初始化T类型的对象意味着:

- 如果T是一个(可能是cv限定的)类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);

- 如果T是数组类型,则每个元素都是默认初始化的;

- 否则,不执行初始化.

int []默认初始化 - >每个元素都是默认初始化的.

"这是由C++ 11规范强制执行的吗?":"没有执行初始化",所以不,如果T没有归零构造函数(即T是POD),则不强制归零.对于T = int,不必执行归零.

为什么它为零呢?如果您的程序从操作系统分配新内存,则操作系统会为您清空新内存.如果你能读取另一个可能存储合理数据的程序的内存,那将是非常危险的.但是,如果你写入该内存,释放它并再次分配它,它不应该归零.