Re[2]: Похоже, починил.
От: rg45 СССР  
Дата: 20.12.18 20:12
Оценка: +5
Здравствуйте, 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;
};


Сделай ты так сразу, сэкономил бы кучу времени. Но ты же легких путей не ищещь и, вместо того, чтобы воспользоваться готовым умным указателем, ты, по факту, каждый свой класс превратил в умный указатель. Вот только подсчетом ссылок заморачиваться не стал. Вот и получил заслуженную "награду".
--
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.