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