XenuS
эм, мы друг друга не понимаем
я просто говорю что ето не катит
ты предпологаеш что юзер выполнит такой код :
B3DImage img1;
img1.LoadImage("a1.bmp");
...
img1.LoadImage("a2.bmp");
тогда ты прав, и моделька очистится
а я предпологаю что юзер выполнит такой код :
B3DImage * img = new B3DImage;
img->LoadImage("a1.bmp");
...
img = new B3DImage; //тут затерся ойойой указатель на img :)
img->LoadImage("a2.bmp");
так что особой нужды в твоей проверке нету, но она нужна
в принципе НИКТО не пишет такие вещи прямо обьектами
обычно все такие обьекты хранятся в связаном списке
можно для начала добавить менеджер по принципу reference counting
тоесть есть начальный класс от которого все наследуется
потом если обьект где либо используется (на него есть ссылка)
то reference = 1, если обьект используется еще где-то
то reference = сколько обьектов юзает етот обьект
когда какому либо обьекту наш обьект не нужен
то его reference уменьшается на 1
когда какому либо обьекту наш обьект понадобился
то соответственно reference ++
когда reference достигает 0 - обьект само удаляется
в принципе реализация гарантирует, при прямых руках,
отсутствие утечек памяти, но руки реально нужны прямые
в принципе вот пример такого базового класса из того же irrlicht
class IUnknown
{
public:
IUnknown()
: ReferenceCounter(1), DebugName(0)
{
}
virtual ~IUnknown()
{
}
void grab() { ++ReferenceCounter; }
bool drop()
{
--ReferenceCounter;
if (!ReferenceCounter)
{
delete this;
return true;
}
return false;
}
private:
s32 ReferenceCounter;
};
просто надо гарантировать что при вызове "delete Engine;"
очистится все что выделял движок
для етого не плохо бы зделать свой менеджер памяти,
который бы выделял бы память
ps. я даю советы, потому что не одну шишку набил на етих проблемах
реально если неправильно зделать базовую архитектуру,
то потом все 400 кб кода прийдется тупо удалять ....
я один и тот же проект 3 раза переписывал,
только из-за того что не правильно делал менеджемент памяти
а теперь я пишу код который выдерживает самые жосткие проверки типа
while 1
Game = new Game
Game.Init()
Game.Update()
Game.Draw()
Game.Free()
Game = null
wend
и память не течет ... а твой проект так сможет ?