拷贝构造函数内存泄露问题
class A{
public:
A(){
buf=NULL;
len=0;
}
~A(){
if(buf!=NULL)
delete buf;
buf=NULL;
this->len=0;
}
A &clone() const{
A *a=new A;
a->buf=new BYTE[this->len];
memcpy(a->buf,this->buf,this->len);
a->len=this->len;
return *a;
}
BYTE *buf;
LONG len;
};
class B{
public:
B(){};
B(const B& rhs){
this->a=rhs.a.clone();
}
A a;
};
static int code=41;
void package(vector<B> &vct){
B b;
b.a.buf=new BYTE[50];
memset(b.a.buf,code,50);
b.a.len=50;
vct.push_back(b);
}
int _tmain(int argc, _TCHAR* argv[])
{
while(1){
/*
vector<B> vctB;
package(vctB);*/
B b;
b.a.buf=new BYTE[50];
B a(b);
}
system("pause");
return 0;
}
[解决办法]
明显的问题:
A &clone() const
若果返回类型是A&,里面的new A谁来负责释放?
应修改为返回指针。B类成员变量A也改为指针,直接使用clone到的指针,记得添加A指针的初始化与释放代码。