Здравствуйте, Igore, Вы писали:
I>[ccode]
I>47 {
I>48 delete m_dynamicMesh;
I>49 m_dynamicMesh = nullptr;
I>
I>Теперь нужен деструктор m_dynamicMesh, и removeBlock(у тебя там случайно delete this не происходит)?
CDynamicMesh::CDynamicMesh(eing::graphic::world::CBlock *parentBlock) :
m_parentBlock(parentBlock),
m_dynamicModel(nullptr)
{
m_vertexBuffer = new Urho3D::VertexBuffer(EING_ST->graphic()->context());
m_indexBuffer = new Urho3D::IndexBuffer(EING_ST->graphic()->context());
m_geometry = new Urho3D::Geometry(EING_ST->graphic()->context());
m_vertexBuffer->SetShadowed(true);
m_indexBuffer->SetShadowed(true);
m_podElements.Push(Urho3D::VertexElement(Urho3D::TYPE_VECTOR3, Urho3D::SEM_POSITION));
m_podElements.Push(Urho3D::VertexElement(Urho3D::TYPE_VECTOR3, Urho3D::SEM_NORMAL));
dynamicModel()->SetNumGeometries(1);
addBlock(m_parentBlock);
}
CDynamicMesh::~CDynamicMesh()
{
EING_LOG_DBG_POINT;
if(m_dynamicModel) { EING_ST->graphic()->physicsWorld()->RemoveCachedGeometry(m_dynamicModel); } // Это urho3d, не смотрел что там происходит
delete m_vertexBuffer;
delete m_indexBuffer;
delete m_geometry;
m_podElements.Clear();
if(m_dynamicModel) { delete m_dynamicModel; } // Это urho3d объект, не мой
EING_LOG_DBG_POINT;
}
void CDynamicMesh::addBlock(eing::graphic::world::CBlock *block)
{
m_blocks.push_back(block);
recalculate();
}
void CDynamicMesh::removeBlock(eing::graphic::world::CBlock *block)
{
m_blocks.remove(block);
if(block == m_parentBlock)
{
m_parentBlock = m_blocks.empty() ? nullptr : m_blocks.front();
}
recalculate();
}
void CDynamicMesh::recalculate()
{
if(m_blocks.size() && m_parentBlock)
{ ... }
}
Вообще я склоняюсь к мысли что это действительно не логгер, а что то не так с умными указателями urho3d