C++ 删除指向创建数组的类的指针
基本上我有一个类a,它在构造时创建一个数组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;
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:注意,你们还需要一个非默认的复制构造函数和操作符=
,否则你们会得到内存损坏。