首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

拷贝构造函数内存泄露有关问题

2013-11-19 
拷贝构造函数内存泄露问题class A{public:A(){bufNULLlen0}~A(){if(buf!NULL)delete bufbufNULLth

拷贝构造函数内存泄露问题
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指针的初始化与释放代码。

热点排行