写了一个小程序,工作时会跑一个大循环,在运行时发现有严重的内存泄露,内存不停增长。
经过几次复查,终于找出问题所在,代码结构大概如下:
struct myobj
{
myobj()
{
memset(this,0,sizeof(myobj));
}
int n;
//...其他成员
string s;
}
定义了一个结构体,有众多类型成员,想初始化成员但又懒得一一赋值,所以在构造函数使用了memset函数。
问题就出在这里,该函数同样清空了所有string成员的内存空间,影响了该对象的析构,从而导致内存泄露。
所以当对象有复杂类型成员时,构造函数中不要使用memset初始化,有指针成员时要谨慎使用!