Уважаемые гуру! Посоветуйте, пожалуйста как справится со следующей проблемой.
Написал класс CBASEMain. В нём есть виртуальная функция Virt(int q), которая переопределяется в наследуемых классах (их 5 штук).
В программе объявляю глобальный массив объектов СBASE *fff[100]; (глобальный, потому что мне надо иметь доступ к нему из разных функций...).
Итак, при нажатии на кнопку, вызывается функция OnButtonAdd(), в которой происходит :
fff[i++]= new <класс-наследник (их 5 штук) от CBASE>, т.е. при каждом нажатии на кнопку Add создаётся объект.
Далее, в OnButtonAdd(), запускается таймер (один для всех объектов), событие которого вызывает функцию My(), в теле которой есть вызов в цикле fff[i]->Virt(int q), т.е. вызов нужной версии виртуальной функции Virt(int q),
и при определённых условиях, в My() нужно бы было вызвать что-то типа delete fff[2], т.е. удалить один объект из массива объектов. Но так как массив объектов я объявил глобальным — это ведёт к завершению программы. Можно ли как-то это исправить ? А как сделать чтобы он был не глобальным я не знаю. Т.е. этот массив объектов должен быть доступен функциям OnButtonAdd() и My()?
Пожалуйста, помогите.
Re: Как удалить глобальный объект или посоветуйте, что помен
Здравствуйте, kavalero, Вы писали:
K>и при определённых условиях, в My() нужно бы было вызвать что-то типа delete fff[2], т.е. удалить один объект из массива объектов. Но так как массив объектов я объявил глобальным — это ведёт к завершению программы.
Возможно, проблема в том, что после delete fff[2] не стоит fff[2] = NULL, и на следующий тик таймера вызывается вирт. ф-я мёртвого объекта?
Для более точного "диагноза" желательно увидеть код.
Не думайте, мысли — источник ошибок.
Re[2]: Как удалить глобальный объект или посоветуйте, что по
Здравствуйте, Georgy, Вы писали:
K>>и при определённых условиях, в My() нужно бы было вызвать что-то типа delete fff[2], т.е. удалить один объект из массива объектов. Но так как массив объектов я объявил глобальным — это ведёт к завершению программы.
G>Возможно, проблема в том, что после delete fff[2] не стоит fff[2] = NULL, и на следующий тик таймера вызывается вирт. ф-я мёртвого объекта? G>Для более точного "диагноза" желательно увидеть код.
Да и вообще, дизайн программы вызывает большие вопросы.
Глобальный... голый массив... голых указателей... без контроля размера (а что, если юзер нажмёт кнопку 101 раз?)...