Если ваша переменная имеет тип A, у нее нет виртуального деструктора, и поэтому она не будет смотреть на фактический тип времени выполнения объекта, чтобы определить, что ему нужно вызвать деструктор
Добавить пустой деструктор в A
виртуальный ~ A () {}
и это должно исправить.
Как правило, это нужно делать для любого класса, который может использоваться в качестве базового класса.