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

C++ 删除指向创建数组的类的指针,c++,class,pointers,memory-management,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;

基本上我有一个类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;
在通过函数传递后,我在第三个类中初始化它:

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;
}

但这似乎不起作用。

我假设
mydata
是您的类的成员(否则,代码第7行中的
mydata
是什么?)

因此,动态数组是类的成员。如果您想在包含对象被销毁时销毁它,您应该严格执行以下操作:在类的析构函数中对成员进行销毁。比如:

~A() 
{
  delete [] mydata;
}

现在,当您调用
delete mypointer
时,它将调用类的析构函数,这将销毁数组。

如果构造函数新建[]一些数据,析构函数应再次删除[]


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

您所说的“我想删除它,这样它就可以创建一个新的而不会丢失内存”是什么意思。您想回收缓冲区吗?是的,但问题是高度和宽度每次都会改变。谢谢,我不确定这是正确的方法(关于mydata是类的一部分的说法你们是对的)@Simon:注意,你们还需要一个非默认的复制构造函数和
操作符=
,否则你们会得到内存损坏。