首先,你说的应该是memset,我就当你是问memset了。
然后对于C++来说,因为C++作者在设计上规定了空指针必须是0,所以理论上你用memset全零是可以的。
如果是C的话,虽然实务中空指针确实都实现为0,但似乎语言设计上并未规定它必须是零。因此,理论上不能这么做,但实际上在已知的所有平台中都不会有问题。
所以对于题主的情况:理论上没有问题,但不建议你这么做,因为影响可读性,而且未必能提升性能。
不成熟的优化是万恶之源。高级优化是能够把这种连续赋值给优化好的,不需要自己去想memset这种提前优化的办法。
memcpy
没问题???!!!memcpy
啊!不是 memset
的啊!!! memcpy(parray, 0, size);
这里从地址为 0 的地方开始拷贝元素,直接 crash 的啊!
那改成 memset
就没问题了吗?
A **parray = new A *[size] memset(parray, 0, size);
memset
的第三个参数是以 byte 数计的啊!
不是按数组元素个数计的!
得改成 size * sizeof(A*)
才行
所以你看看,老想着怎么优化,结果一不小心两个错误,把最重要的正确性指标都搞没了~