Информация об изменениях

Сообщение Re[4]: Крашит в дебрях std при работе с ofstream от 17.12.2018 16:30

Изменено 17.12.2018 16:35 Sheridan

Re[4]: Крашит в дебрях std при работе с ofstream
Здравствуйте, 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)
{ ... }
}
[/ccode]

Вообще я склоняюсь к мысли что это действительно не логгер, а что то не так с умными указателями urho3d
Re[4]: Крашит в дебрях std при работе с ofstream
Здравствуйте, 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