Ответ 1
Это не приведет к утечке объекта, который вы удаляете, его блок памяти будет освобожден.
Если вы не объявили деструктор в base_class
виртуальным, он протекает с любыми динамически выделенными объектами, содержащимися в derived_class
, которые полагаются на деструктор derived_class
, который вызывается для их освобождения. Это связано с тем, что если деструктор не является виртуальным, деструктор derived_class
не вызывается в этом случае. Это также означает, что деструкторы "внедренных объектов" внутри derived_class
не будут автоматически вызваны, отдельная, но дополнительная проблема, которая может привести к дальнейшим утечкам и неисполнение жизненного кода очистки.
Короче говоря, объявите деструктор в base_class
виртуальным, и вы можете безопасно использовать технику, которую вы представили.
Для кодированного примера см.