Car*_*s00 4 c++ memory-management c++11
在C++ 11中,当我使用T *array = new T[n];它已经归零时使用动态数组(使用gcc 4.7.2,Ubuntu 12.10 64bit).
编辑:我已经检查过了T = int.
gcc cxx-flags:-std=gnu++11 -O3 -ffast-math -fno-rtti
§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,不必执行归零.
为什么它为零呢?如果您的程序从操作系统分配新内存,则操作系统会为您清空新内存.如果你能读取另一个可能存储合理数据的程序的内存,那将是非常危险的.但是,如果你写入该内存,释放它并再次分配它,它不应该归零.