清空不过就是填充空字符(#0: 编号为 0 嘚字符), 说来说去是一回事.
清空不过就是填充空字符(#0: 编号为 0 嘚字符), 说来说去是一回事.
2、ZeroMemory是一个宏只是用于把一段内存的内容置零,内部其实是用
memset实现的而memset除了对内存进行清零操作,还可以将内存置成别的字符
3、如果程序是Win32程序而且不想连接c运行时庫,那就用ZeroMemory如果需要跨平台,那就用memset
所以如果ZeroMemory和memset用于清零操作,其本质是一样的
1、ZeroMemory会将结构中所有字节置0,而“={0}”只会将成员置0其中填充字节不变。
2、一个struct有构造函数或虚函数时ZeroMemory可以编译通过,而“={0}”会产生编译错误其中,“={0}”的编译错误起到了一定的保护作鼡
因为对一个有虚函数的对象使用ZeroMemory时,会将其虚函数的指针置0这是非常危险的(调用虚函数时,空指针很可能引起程序崩溃)
因此,在windows平台下数组或纯结构使用ZeroMemory是安全的,而类(class)就使用构造函数进行初始化不要调用ZeroMemory。
另外如果一个类的结构中包含STL模板(Vector、List、Map等等),那么使用ZeroMemory对这个类的对象中进行清零操作也会引起一系列的崩溃问题(指针指向内存错误、迭代器越界访问等)
所以,再次强烈建議:类(class)只使用构造函数进行初始化不要调用ZeroMemory进行清零操作。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。