读书人

一个stl内存释放有关问题初学找不到

发布时间: 2012-02-24 16:30:39 作者: rapoo

一个stl内存释放问题,初学找不到原因,请大家给分析看看
我开始学stl,但是确碰到了一个问题,就是我自己定义了一个类,这个类中有指针,这个类的构造函数为指针分配了内存,但是再关闭这个程序时,却出现了异常,请强人给看看:(我个人感觉时在析构时产生了问题,但是问题在哪里?)

class CXX
{
public:
float* pFloat;
int *pInt;
explicit CXX()
{
pFloat = new float;
pInt = new int;
}
CXX(float tmp,int tmp1)
{
pFloat = new float;
*pFloat = tmp;
pInt = new int;
*pInt = tmp1;
}
~CXX()
{
if (pFloat!=NULL)
{
delete [] pFloat;
pFloat = NULL;
delete [] pInt;
pInt = NULL;
}
}
};
void CtestSTLView::OnTestStl()
{
std::list <CXX> aaa;
aaa.push_back(CXX(1,1));
aaa.push_back(CXX(2,1));
aaa.push_back(CXX(3,1));
int xxx = aaa.size();
CString str;
str.Format( "%d ",xxx);
AfxMessageBox(str);
aaa.clear();
}


[解决办法]
class CXX
{
public:
float* pFloat;
int *pInt;
explicit CXX()
{
pFloat = new float;
pInt = new int;
}
CXX(float tmp,int tmp1)
{
pFloat = new float;
*pFloat = tmp;
pInt = new int;
*pInt = tmp1;
}

//加上这个就可以了。
CXX(const CXX& c) {
pFloat = new float(*c.pFloat);
pInt = new int(*c.pInt);
}
//这个最好也加上。
CXX& operator=(const CXX& c) {
if(&c != this) {
delete pFloat;
delete pInt;
pFloat = new float(*c.pFloat);
pInt = new int(*c.pInt);
}
return *this;
}

~CXX()
{
if (pFloat!=NULL)
{
delete [] pFloat;
pFloat = NULL;
delete [] pInt;
pInt = NULL;
}
}
};
[解决办法]
含有指针数据成员的类一般都要自定义拷贝构造函数,构造函数,和析购函数
你这里没有拷贝构造函数class CXX
{
public:
float* pFloat;
int *pInt;


explicit CXX()
{
pFloat = new float;
pInt = new int;
}
CXX(float tmp,int tmp1)
{
pFloat = new float;
*pFloat = tmp;
pInt = new int;
*pInt = tmp1;
}
//加入拷贝构造函数
CXX(CXX &t)
{pFloat=new (t.pFloat);
pInt=new (t.pInt);
}
~CXX()
{
if (pFloat!=NULL)
{
delete [] pFloat;
pFloat = NULL;
delete [] pInt;
pInt = NULL;
}
}
};
void CtestSTLView::OnTestStl()
{
std::list <CXX> aaa;
aaa.push_back(CXX(1,1));
aaa.push_back(CXX(2,1));
aaa.push_back(CXX(3,1));
int xxx = aaa.size();
CString str;
str.Format( "%d ",xxx);
AfxMessageBox(str);
aaa.clear();
}

读书人网 >C++

热点推荐