2011-08-25 116 views
9

我在初始化指针数组时遇到了麻烦。我发现用gcc C++(4.6.0)编译的是:C++指针数组初始化帮助

MyClass** a = new MyClass*[100]; 

并不总是初始化指针数组。 (大部分是没有时间给我这搞糊涂了空指针数组)

MyClass** a = new MyClass*[100](); 

是否阵列中的所有指针初始化为0(空指针)。

我正在编写的代码旨在跨Windows/Linux/Mac/BSD平台移植。这是gcc C++编译器的一个特殊功能吗?或者它是标准的C++?它在标准中说明了什么?

+0

大概你指'MyClass的**一个新= MyClass的* [100]()'。是的,'new'初始化程序是一个标准功能。我只是在追查一个重复的问题。 –

+0

不完全重复,因为它询问为什么不是(这是不正确的),而不是为什么:http://stackoverflow.com/questions/6717246/no-array-allocated-using-new-can-have-an-initializer ..但足够接近。投票结束。 –

+0

第一个版本返回未初始化的内存,如果以前未使用,则* *可以为NULL(零)。出于安全原因,大多数操作系统清除分配给进程的内存。 –

回答

5

该值初始化为标准C++。

相关的标准是在C++ 98和C++ 03§5.3.4/ 15中。在C++ 98中,它是默认初始化,在C++ 03中进行初始化。对于你的指针,它们都减少到零初始化。

C++ 03§5.3.4/ 15:

–如果新初始化的形式()的,该项目是值初始化(8.5);

在C++ 0x中的那款,而不是指直接初始化” 8.5 “初始化规则,凡在N3290(FDIS的),你发现在8.5节/ 16同样的措辞。

干杯&第h。,

+0

很好的答案!尽我所能。我现在可以默认/值/零自信地初始化。 –