Как корректно удалить 2 вектора, состоящие из boost::shared_ptr? Существуют 2 вектора:
std::vector> vec_ctrl (содержит указатели на элементы управления для интерфейсов GUI – различные производные классы от hgeGUIObject) и
std::vector> vec_gui (указатели на gui интерфейсы). Создание векторов происходит в функции, которая вызывается из main.cpp. Элементы управления GUI добавляются в цикле
(*igui).get()->AddCtrl((*ictrl).get()); После этого из main.cpp вызываются bool FrameFunc() и bool RenderFunc(). В конце программы при очистке векторов vec_ctrl.clear (); vec_gui.clear (); происходит ошибка - попытка удалить уже удаленный объект. Решить проблему через boost::weak_ptr не получилось (может, это у МЕНЯ не получилось). Пожалуйста, подскажите!
boost::shared_ptr должен создаваться строго 1 раз, и все остальные вектора и прочие копии должны создаваться копированием первого указателя, тогда всё будет в порядке. Удалять можно в любом порядке, даже можно забыть про них, вектора сами при очистке всё удалят.
Если ты где-то создаёшь его дважды то не удивляйся что первый грохает память, и второй тоже пытается сделать то же самое.
Ты создал шаред пойнтер и нигде его не сохранил. При выходе из этой функции шаред будет думать что он последний, кто владеет памятью, и освободит её. Тогда HGE GUI упадёт с ошибкой 0xfeeefeee (доступ к только что освобождённой памяти). gui, myCtrl сохрани до конца работы с гуй.
Не выходит все равно. Как добиться, чтобы при добавлении элемента управления myCtrl к gui с помощью AddCtrl счетчик ссылок myCtrl инкрементировался? Иначе по окончании работы удаляется myCtrl, а потом gui (который тоже содержит указатель на myCtrl) и, конечно, отсюда ошибка. Именно здесь проблема, где используется row-указатель.