Я работаю над игровым движком, и в одном из предыдущих вопросов было предложено начать использовать boost :: ptr_vector для поддержки списка указателей.
Основная идея состоит в том, чтобы иметь несколько штатов, в каждом штате есть SceneGraph. Каждое состояние имеет несколько ресурсов, которые они инициализируют, а затем заполняют свой собственный SceneGraph. У SceneGraph есть boost :: ptr_vector, в который он вставляет указатели ресурсов.
Вот соответствующий код:
Создание ресурса и добавление к SceneGraph в TestState
backgroundImage = new DEBUG_NEW Fenris::Node2D::Image(std::string("backgroundImage"), std::string("../media/img/background.jpg"));
sceneGraph->addNode(backgroundImage, Fenris::Core::STRATUM_BACK);
* 1013 дерева сцены *
boost::ptr_vector<SceneGraphNode> backStratumList;<br>
// The add() method<br>
void addNode(SceneGraphNode *pNode, STRATUM_TYPE stratumType) {
switch(stratumType) {
case STRATUM_BACK:
backStratumList.push_back(pNode);
break;
case STRATUM_NORMAL:
normalStratumList.push_back(pNode);
break;
case STRATUM_FOREGROUND:
foregroundStratumList.push_back(pNode);
break;
}
}
Отредактировано main.cpp с соответствующими строками
PlatformGame::State::TestState *testState = new DEBUG_NEW PlatformGame::State::TestState(std::string("testState"));<br>
// Clean up the previously registered state (deletes its sceneGraph -- verified that the destructor is in fact called via debugger)
delete testState;<br>
// Dump memleak report if we're running in debug mode
#ifdef _DEBUG
_CrtDumpMemoryLeaks();
#endif
Я использую _CrtDumpMemoryLeaks () для вывода отчета журнала утечек памяти. В отчете говорится, что у меня утечка памяти;
Detected memory leaks!
Dumping objects ->
{174} normal block at 0x00A56630, 32 bytes long.
Data: <../media/img/bac> 2E 2E 2F 6D 65 64 69 61 2F 69 6D 67 2F 62 61 63
{173} normal block at 0x00A565A0, 8 bytes long.
Data: < c > A8 63 A5 00 00 00 00 00
Object dump complete.
_CrtDumpMemoryLeaks () имеет проблемы с boost :: ptr_vector или я что-то не так сделал? Отладчик сообщает мне, что State вызывает его деструктор (который имеет; delete sceneGraph), и я также убедился, что деструктор SceneGraph также вызывается.
Любая помощь очень ценится, я хотел бы увидеть пустой отчет об утечке памяти: -)