'gc allocator' выделяет и присматривает за объектами этого типа:
std::pair<const std::string, AlObj*>
То, что у этого объекта есть указатель, не означает, что распределитель вызовет для него удаление.
Если вы хотите, чтобы объект, созданный в setUp (), был GC, тогда вам нужно выделить их через GC. Или научитесь использовать boost: ptr_map или shared_ptr.
Карта уничтожает (не удаляет) объект, которому она владеет . В этом случае ему принадлежит указатель , а не , на который указывает указатель. Поэтому, когда карта уничтожена, она освобождает все, что связано с картой и принадлежащим ей объектом (для указателей это означает, что она ничего не делает).
Если у вас есть карта (или другой контейнер), которая содержит указатели. Вы должны вручную удалить указатели, иначе произойдет утечка памяти. В качестве альтернативы вы можете использовать boost :: ptr_map или карту, которая содержит share_ptr