Вы не следуете правилу из трех .Если ваш класс управляет ресурсами, которые необходимо очистить, вы должны объявить деструктор, конструктор копирования и оператор назначения копирования.Ни один из ваших классов не имеет конструктора копирования или оператора присваивания копии.
Действительно, вы почти наверняка должны просто использовать умный указатель, такой как unique_ptr
из C ++ 0x;shared_ptr
от Boost, C ++ TR1 и C ++ 0x;или scoped_ptr
от Boost.
Вероятная проблема, вызывающая эту конкретную проблему, заключается в том, что вы забыли создать базовый класс GenericInterface
деструктор virtual
, поэтому вызывается неправильный деструктор и MyClass
объект, который вы динамически создаете в Specific
, никогда не уничтожается.
delete
использование объекта через указатель на один из его базовых классов приводит к неопределенному поведению, если деструктор базового класса не объявлен virtual
(это означает, что могут произойти плохие вещи, от утечек памяти до сбоев).