У меня есть std::queue
, который обернут как шаблонный класс, чтобы создать потокобезопасную очередь. У меня есть две версии этого класса: одна, в которой хранятся типы значений, другая, в которой хранятся типы указателей.
Для типа указателя у меня возникают проблемы при удалении элементов очереди при уничтожении. Причина в том, что я не знаю, как безопасно удалить элементы из очереди.
Эта ссылка заявляет (бессмысленно, так что я полагаю, что на самом деле это НЕ СОСТОЯНИЕ), что единственный способ удалить элементы из очереди - вызвать pop()
. Ссылка также говорит, что pop()
вызывает деструктор для элемента.
Ну, это вызывает проблемы с моими типами указателей, потому что они могут указывать или не указывать на агрегаты. Если один из них указывает на агрегат, все они будут это делать, но поскольку оболочка является шаблонной, нет гарантии, с каким типом (агрегированным или неагрегированным) мы имеем дело.
Итак, когда pop()
вызывает деструктор, что происходит? Как мне убедиться, что все удаляется и память освобождается правильно?
Наконец, мое решение использует более старую версию GCC для ARM9. Я не могу это контролировать. Я понимаю, что есть библиотеки, которые имеют интеллектуальные указатели и контейнеры, которые могут помочь здесь, но они для меня запрещены.