这是我的代码。
DWORD *dwDSE = new DWORD[4096];
这是我清除它的[低效]方式:
for (INT k=0;k<4096;k++)
dwDSE[k] = 0;
清除它/将其初始化为零的最佳方法是什么?
答案 0 :(得分:6)
您可以将其初始化为零
DWORD *dwDSE = new DWORD[4096](); //Note the empty parenthesis ()
答案 1 :(得分:3)
使用memset:
memset(dwDSE,0,4096*sizeof(DWORD));
答案 2 :(得分:2)
除非你有一个非常糟糕的编译器,否则最有效的方法 清除它应该是:
std::fill_n( dwDSI, 4096, 0 );
这应该生成与循环相同的代码(即
也非常有效),并且在许多情况下,将是显着的
效率高于memset
,这通常是最差的
解决方案(当然,只适用于特殊值0)。
当然,你通常不会做new DWORD[4096]
无论如何。如果你写:
std::vector<DWORD> dwDSI( 4096 );
你会把它初始化为0,你不会泄漏它
例外的情况。如果您需要传统接口
(关于一个人使用DWORD
的唯一原因),你可以
使用&dwDSI[0]
获取原始指针,如果是,则获取dwDSI.data()
拥有C ++ 11。
编辑:
对另一个答案的评论让我意识到一个重点: 你真的必须动态分配数组吗?如果没有,
DWORD dwDSI[4096] = {};
是最好的解决方案。 (= {}
确保初始化
0)
答案 3 :(得分:1)