Здравствуйте, Sheridan, Вы писали:
S>Дело было не в бобине.
S>Похоже, внутри urho3d отсутствуют проверки внутри их "умных" указателей. Причём они, похоже, это монго встроили везде куда могли дотянуться.
S>Что делаю:
S>S>class cobject
S>{
S> cobject () { buf = new urho3d::vertexbyffer(); }
S> ~cobject () { delete buf; }
S> urho3d::vertexbyffer *buf;
S>}
S>
S>Казалось бы — валидный код. Ан нет, нифига подобного. У них почти любой объект — refcounted, в том числе и этот вертексбуффер. В результате валится в ReleaseRef(); внутри urho
S>Далее, интерфейсы SetVertexBuffer и SetIndexBuffer явно указывают на утечки памяти, если не удалять самостоятельно. Собственно вот поэтому и рулил сам.
S>И на самом деле я до сих пор сомневаюсь что там нет утечек.
Правильно, потому, что у них любой класс, в том числе и
этот вертексбуффер, заточен на использование с их умным указателем:
Urho3D::SharedPtr. И выглядеть это, по их задумке, должно бы примерно так:
class cobject
{
public:
cobject() : m_vertex_buffer_ptr(new Urho3D::VertexBuffer()) {}
virtual ~cobject() { /*nothing to do*/ }
private:
Urho3D::SharedPtr<Urho3D::VertexBuffer> m_vertex_buffer_ptr;
};
Сделай ты так сразу, сэкономил бы кучу времени. Но ты же легких путей не ищещь и, вместо того, чтобы воспользоваться готовым умным указателем, ты, по факту, каждый свой класс превратил в умный указатель. Вот только подсчетом ссылок заморачиваться не стал. Вот и получил заслуженную "награду".