在数组内的对象内删除动态分配的对象
Deleting a dynamically allocated object inside of an object inside of an array
我有一个析构函数,看起来像这样:
Tilemap::~Tilemap(void)
{
if(width>0 && height > 0)
{
for (int x = 0; x < getMapWidth(); x++)
{
for (int y = 0; y < getMapHeight(); y++)
{
if(getTileAtPoint(x,y)->isInteractable())
{
delete getTileAtPoint(x,y)->getInteractable();
}
}
}
SAFE_DELETE_ARRAY(tileArray);
}
return;
}
SAFE_DELETE_ARRAY()只是一个宏,看起来像这样:
#define SAFE_DELETE_ARRAY(ptr) { if(ptr) { delete [](ptr); (ptr)=NULL; } }
tileArray是一个动态分配的数组,其中包含包含可交互对象的tile。它的声明看起来像这样:
tileArray = new Tile[mapWidth*mapHeight];
每当我删除代码的双for循环部分时,只留下这个:
Tilemap::~Tilemap(void)
{
if(width>0 && height > 0)
{
SAFE_DELETE_ARRAY(tileArray);
}
}
我得到内存泄漏,因为有一个我声明的可交互对象没有被删除。然而,当我离开双for循环时,代码可以顺利通过for循环,但随后在SAFE_DELETE_ARRAY上崩溃,并显示以下错误消息:
未处理的异常在0x008927CC在宇宙飞船.exe: 0xC0000005:访问违反读取位置0xFEEEFEEE.
有人知道解决这个问题的方法吗?
一个非常简单的模式:让你的tile对象的析构函数删除它们的可交互对象(如果它们有)。这样一来,删除瓷砖就会自动清理,你就不用担心这个问题了。
或者使用某种类型的智能指针而不是原始指针来指向Tile类所引用的对象。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 销毁C++中动态分配的内存(数组对象)
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 动态分配的对象未初始化
- std::p air 会破坏其动态分配的对象吗?
- 动态分配对象中的字段-动态分配更好还是静态分配更好?C++
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 使用私有析构函数删除动态分配的对象
- 动态分配许多 Boost::直方图对象
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 将动态分配对象传递到 boost::any 构造函数中
- 将动态分配的对象添加到对象指针数组中
- 如何删除列表中的动态分配类对象<T>?
- 处理另一个类中类动态分配的对象数组
- 如何使用一些参数初始化动态分配的数组中的对象
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 如何复制或返回包含动态分配的内存的对象
- C 删除指向动态分配对象的指针