1.慎用memcpy
struct A
{
string s;
int i;
};
void fun(struct A* pSrc)
{
struct A pDest;
memcpy(&pDest, pSrc, sizeof(struct A));
}
问题在于,memcpy完全是按照内存基于第三个参数指定的字节数来拷贝,对于简单数据类型(非指针)是完全适用的。但是上面结构体中的string,实质是浅拷贝。这样做,存在两次析构string的问题。
解决方案:单个结构体成员逐一拷贝;写拷贝构造函数。
同样,memset也不能使用。