我在VC ++ 2010中有以下代码:
PWCHAR pszErrorMessage = new WCHAR[100];
此代码初始化一个指向数组的char指针。但是数组中的值是垃圾。我想要一种方法将值设置为零。 将上面的内容更改为下面的值会将数组中的所有值设置为零。这也适用于自定义结构数组。
PWCHAR pszErrorMessage = new WCHAR[100]();
答案 0 :(得分:1)
如上所述elsewhere,是的,括号强制值初始化,这意味着算术类型将初始化为零(以及指向空指针的指针等)。对于明确定义的类型初始化成员的默认构造函数,这不会有任何区别 - 对于它们,无论是否包含括号,都将调用默认构造函数。
是的,这可能会产生一些(次要)性能影响:初始化内存可能需要一些时间,尤其是在分配大量内存时。它不会总是:如果你正在分配一个带有默认ctor的对象类型来初始化它的成员,那么ctor将以任何一种方式使用。
此功能已添加到C ++ 03标准中。另外,我不记得它是否在VC ++ 2005中实现。我试图通过VC ++开发人员博客进行快速扫描,但是后来发布了VC ++ 2005.它确实包含了一些关于VC ++ 2005 SP1的信息,似乎没有提到它。
至少在我查看生成的代码时,将分配的缓冲区归零的代码似乎是在线分配的,至少对于像char
这样的简单类型来说是这样。例如:
xor eax, eax
mov rcx, QWORD PTR $T86268[rsp]
rep stosb