我有一个名为 Circle 的类,用于物理模拟。
一个圆声明如下:
class Circle : public IPhysics,
public IRenderable
{
...
}
圆圈被创建,然后使用它们的 IRenderable 指针存储在一个向量中,如下所示:
Circle* pC = new Circle(
mass,
vec2( vCircles[x]._x, vCircles[x]._y ), // position
vec2(0.0f, 0.0f), // velocity
vec2(0.0f, -g_kGRAVITY), // acceleration
_ClientCfg.rGridSquareSideLen * 0.1f, // radius
colour, colour // colour, motion colour
);
if( pC != nullptr )
streamed_circles.push_back(dynamic_cast<IRenderable*>(pC));
渲染后,它们会从后台缓冲区中删除,如下所示:
std::vector<IRenderable*> _pbkBuffer;
...
_pBkBuffer->erase( _pBkBuffer->begin(), _pBkBuffer->end() );
此删除导致内存泄漏。
为了从后台缓冲区向量中删除对象,我是否首先必须将它们转换回它们的叶类类型(例如圆形类型或其他叶类类型?)
编辑:我想我需要这样的东西:
std::for_each(
_pBkBuffer->begin() + _nStaticRenderables, _pBkBuffer->end(),
[]( IRenderable* p )
{
if( typeid(*p) == typeid(Circle) )
{
Circle* pC = dynamic_cast<Circle*>(p);
delete pC;
}
}
);
谢谢