В чем создавал, там и удаляй, например, есть менеджер объектов, в нем есть функции для создания и удаления объектов. Менеджер использует контейнер для хранения. Используешь менеджер для создания, обращения, удаления объектов и всё.
Код
#include <iostream>
#include <vector>
//
// Простой объект
//
class CObject
{
private:
int m_ID;
public:
CObject(int nID) { m_ID = nID; std::cout << "Created! ID is " << m_ID << std::endl; }
~CObject() { std::cout << "Destroy! ID is " << m_ID << std::endl; }
int GetID() { return m_ID; }
void PrintID() { std::cout << "ID is " << m_ID << std::endl; }
};
class CObjectMgr
{
private:
std::vector<CObject *> m_Objects;
public:
CObjectMgr() { }
~CObjectMgr()
{
//
// Освобождаем память выделенную под объекты
//
for(std::vector<CObject *>::iterator it = m_Objects.begin(); it != m_Objects.end(); it++)
{
delete (*it); // освобождаем
}
}
CObject* Create(int nID)
{
CObject *pObj = new CObject(nID); // создаем объект динамически
m_Objects.push_back(pObj); // вставляем в конец
return pObj; // возвращаем указатель на него
}
CObject* Get(int nID)
{
// проходим по вектору
for(std::vector<CObject *>::iterator it = m_Objects.begin(); it != m_Objects.end(); it++)
{
if(((*it)->GetID()) == nID) // сравниваем ID
return *it; // возвращаем его
}
return 0; // если нет, то 0
}
void Destroy(int nID)
{
for(std::vector<CObject *>::iterator it = m_Objects.begin(); it != m_Objects.end(); it++)
{
if(((*it)->GetID()) == nID) // сравниваем ID
{
delete (*it); // освобождаем память
m_Objects.erase(it); // стираем объект из вектора
return; // выходим из функции
}
}
}
};
int main(int argc, char *argv[])
{
CObjectMgr mgr; // Создаём экземпляр менеджера
// Заполняем
for(int i = 0; i < 100; i++)
mgr.Create(i);
// Получаем
mgr.Get(46)->PrintID();
// Удаляем если не надо
mgr.Destroy(55);
return 0;
}