c++对象 内置类型 结构体等的初始化
C++中五花八门的初始化
初始化结构体
SecureZeroMemory(&imgarg,sizeof(IMGARG));
memset(&_BadPointInfo,0,sizeof(BadPointInfo));
结构体赋值
memcpy(&_BadPointInfo,(BadPointInfo *)lParam,sizeof(BadPointInfo));
使用指针之前要进行判空
secureZeroMemory、ZeroMerory、memset和"={0}"的区别
secureZeroMemory、ZeroMerory、memset和"={0}"的区别
Win32 API (3) ZeroMemory,SecureZeroMemory
前两个是Windows API,不能跨平台。memset是标准库,能跨平台。
ZeroMemory和memset且于清零时,会将结构中所有字节置0,如果结构体中有虚函数或结构体成员中有虚函数,则会将虚函数指针置0,如果后续程序调用虚函数,空指针很可能导致程序崩溃!
因此,有虚函数或成员中有虚函数的结构体初始化,一定要用构造函数来完成。
另外,如果一个类的结构中包含STL模板(Vector、List、Map等等),那么使用ZeroMemory对这个类的对象中进行清零操作也会引起一系列的崩溃问题(指针指向内存错误、迭代器越界访问等)。所以,再次强烈建议:类(class)只使用构造函数进行初始化,不要调用ZeroMemory进行清零操作。
delete
delete会自动检测对象是否为空,所以不需要 if not null then delete这种操作,可以直接 delete pMydata
GetModuleDirectory