基本上我有一个A类,它在构造时创建一个数组。
class A
{
public:
A (float height, float width, BYTE* data)
{
setsize(height,width);
mydata = CreateNewBuffer(sizes);
setdata(data);
}
~A()
{
}
void setsize(float height, float width)
{
sizes.cx = width;
sizes.cy = height;
}
BYTE* CreateNewBuffer (SIZE sImage)
{
return new BYTE [sImage.cx * sImage.cy];
}
void setdata(BYTE* data)
{
memcpy(threatdata,data,sImage.cx * sImage.cy);
}
}
我在更大的类中创建了一个指向这个类的指针:
A* mypointer;
我在传递函数后在第3课中初始化:
3rdClass::instance()->myfunction(mypointer)
在函数myfunction()里面我设置了一个bool,表明该类是构造的
mypointer = new A(height,width,data);
wasconstructed = true;
现在,当我下次传递指向函数myfunction()
的指针时,我检查该类是否已经构造,如果是,我想删除它以便创建一个没有内存的新类损失。
这样做的正确方法是什么:
我尝试了基本的东西,
if (3rdClass::instance()->checkifconstructed()){
delete mypointer; //(or even delete [] mypointer but then i get heap corruption)
mypointer = NULL;
}
但这似乎不起作用。
答案 0 :(得分:4)
我认为mydata
是您班级的成员(否则,您代码的第7行mydata
是什么?)
因此,动态数组是您类的成员。如果你想在销毁包含对象时销毁它,你应该这样做:在你的类的析构函数中命令你的成员被销毁。类似的东西:
~A()
{
delete [] mydata;
}
现在,当你调用delete mypointer
时,它将调用类的析构函数,这将破坏数组。
答案 1 :(得分:1)
如果构造函数new []有些数据,析构函数应该再次删除[]。
您还应该考虑复制或分配给该类对象时会发生什么。您是否需要创建一组新数据并从原始对象复制值?