删除指向创建数组的类的指针

时间:2011-03-04 20:28:11

标签: c++ class pointers memory-management

基本上我有一个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;
}

但这似乎不起作用。

2 个答案:

答案 0 :(得分:4)

我认为mydata是您班级的成员(否则,您代码的第7行mydata是什么?)

因此,动态数组是您类的成员。如果你想在销毁包含对象时销毁它,你应该这样做:在你的类的析构函数中命令你的成员被销毁。类似的东西:

~A() 
{
  delete [] mydata;
}

现在,当你调用delete mypointer时,它将调用类的析构函数,这将破坏数组。

答案 1 :(得分:1)

如果构造函数new []有些数据,析构函数应该再次删除[]。

您还应该考虑复制或分配给该类对象时会发生什么。您是否需要创建一组新数据并从原始对象复制值?