Скажем, у меня есть две базовые классы,Если деструктор базового класса, который вы не будете использовать для удаления объекта, должен быть виртуальным?
struct A {};
struct B {};
и производный тот, который использует множественное наследование
struct D : A, B {};
Если я использую сценарий выглядит примерно так:
A *obj = new D;
т.е. Я никогда не буду использовать базовый класс B
для ссылки на производный объект, Мне нужно сделать деструктор обеих баз виртуальным? В настоящее время я объявляю деструктор B
как protected
, чтобы запретить другим пользователям делать это, но достаточно ли этого?
Как насчет деструктора D
?
Нет, но вы должны. –
Если вы никогда не будете ссылаться на 'D' как' B', вас может заинтересовать ['protected 'или' private' наследование.] (Http://stackoverflow.com/questions/860339/difference-between -private-public-and-protected-inheritance) – jaggedSpire
Чтобы процитировать могучего Скотта Мейерса: * ... объявить виртуальный деструктор в классе тогда и только тогда, когда этот класс содержит хотя бы одну виртуальную функцию *. –