Я работал в проекте, но недавно я проверял, есть ли утечка в моей программе, и в результате она протекает и много.
Я использую _CrtDumpMemoryLeaks();
, чтобы получать все сообщения об утечках иЯ проверяю, что большинство из них связаны с бустом, я знаю, что это должно быть моей проблемой, но я не могу понять, почему это происходит.
В выходных данных отладки отображаются следующие строки:
Dumping objects ->
{673} normal block at 0x00E075E0, 8 bytes long.
Data: <H @e > 48 92 E0 00 40 65 E0 00
{671} normal block at 0x00E065C0, 8 bytes long.
Data: <@e > 40 65 E0 00 00 00 00 00
{669} normal block at 0x00E06540, 68 bytes long.
Data: < e mountains.pn> C0 65 E0 00 6D 6F 75 6E 74 61 69 6E 73 2E 70 6E
{665} normal block at 0x00E063B0, 8 bytes long.
Data: <H > 48 92 E0 00 00 00 00 00
{663} normal block at 0x00E09248, 68 bytes long.
Data: < c nubes.png > B0 63 E0 00 6E 75 62 65 73 2E 70 6E 67 00 CD CD
Что заставляет меня поверить, что проблема в том, где я использую эти строки, и первый вызов с этими строками заключается в следующих строках:
tutorialLevel->addLayerToList("nubes.png", 1600.f, 720.f, 1.0f, 0.0f, 0.1f, true);
tutorialLevel->addLayerToList("mountains.png", 1600.f, 720.f, speedXVectorPanda.at(0), 0.0f, 0.5f, false);
А фактическая функция addLayerToList
следующая:
void Level::addLayerToList(std::string name, GLfloat widthLayer, GLfloat heightLayer, GLfloat velX, GLfloat velY,
GLfloat constantX, bool hasRepetition)
{
layersList.push_back( new Layer(name, widthLayer, heightLayer, velX, velY, constantX, hasRepetition) );
}
И LayersList определяется следующим образом:
boost::ptr_vector< Layer > layersList;
Возможно, я неправильно понял, как владение указателями работает в Boost, но в примерах, которые я недавно проверял, это правильноспособ передать право собственности на объект ptr_vector
, я не прав?
И другой мой вопрос, если необходимо освободить указатели для вектора, или лучше оставить auto_ptr
делать свою работу?
Тспасибо за помощь.