编程已经很熟悉了,但也时长会遇到一些问题,遂记录
1. memcpy带来的未拷贝构造警告问题
其问题是 memcpy如何拷贝复杂类型数组
memcpy ( &upoData[i] , &pData , sizeof ( UData ) ) ;
目前查出来的原因是,memcpy 会按照内存写入数据。并不会执行拷贝构造函数。当执行拷贝操作时,拷贝指向的类或者结构体如果存在指针,
并且指针指向了动态申请的对象或者数组。此指针将被拷贝源的指针覆盖。而当程序退出时,这部分被覆盖的数据将造成数据泄露。
这类警告应该属于编码错误。
解决方案,目前还没有决定用哪个:
1.重写类,使用拷贝构造函数,弃用memcpy。
优点,就应该这么办,缺点,工程量有点大,老代码,没有敢动。
2.MakeFile中添加[-Wclass-memaccess]将警告屏蔽。
优点,修改的时间快。
缺点,不讲武德,欺骗客户。
3.强制类型转换
memcpy ( &upoData[i] , &pData , sizeof ( UData ) ) ;---->memcpy ( (void*)&upoData[i] , (void*)&pData , sizeof ( UData ) ) ;
优点,修改的时间快。相比第二种看着舒服点。
缺点,也不太讲武德,有点欺骗客户和编译器感情。