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

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

但这似乎行不通。

最佳答案

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

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

~A() 
{
  delete [] mydata;
}

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

关于c++ - 删除指向创建数组的类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198908/

相关文章:

c++ - 从 C++ 函数返回指针的推荐方法?

c++ - 指针引用类赋值

c - 是否允许对 "compatible"结构体的结构体指针进行转换和取消引用?

c - 循环遍历其他源文件中定义的数组时出现问题

c++ - clang 和 g++ 中类成员的重新排序

c++ - 我可以简单地在分配的内存上调用构造函数,而不是放置新的吗?

c++ - 对类型 'int' 的非常量左值引用无法绑定(bind)到类型 'int' 的临时对象

class - 在 Xamarin 中创建自定义网格项

c++ - whitecards(小写)跳过 PlayerVector 中的其他玩家,但第一个 - 为什么?

c++ - *(ptr)[j++] 的替代符号?