Мне предоставляется сторонняя библиотека с ее заголовком для использования. Теперь в этой библиотеке есть класс Base. Проблема с этим классом в том, что у него нет виртуального деструктора. Теперь, поскольку у меня нет стороннего кода, я не могу вносить изменения там.
Мне сказали написать несколько производных классов с этим и убедиться, что объект правильно очищается при удалении объектов. Как мы можем этого добиться?
Спасибо за ответ, похоже, у меня есть только 2 варианта.
1) поместить виртуальный деструктор в производный класс 2) использовать композицию.
Я планирую использовать подход № 1. Я планирую иметь производный класс-оболочку с виртуальным деструктором. А затем используйте этот производный класс-оболочку для дальнейшего вывода. Ниже приведен код.
//++ THIRD PARTY HEADER
class base
{
public:
~base(){ }
};
//-- THIRD PARTY HEADER
//++ MY CODE
// wrapper polymorphic base.
class polymorphic_base
{
public:
virtual ~polymorphic_base() { }
};
class derived1 : polymorphic_base
{
/// derived 1
};
class derived2 : polymorphic_base
{
/// derived 2
}
void foo(polymorphic_base *pb)
{
// use pb
// use pb
delete pb;
}
//-- MY CODE
Пожалуйста, дайте мне знать, если этот подход должен быть в порядке?
Base
, возможно, не является производным от какой-то супербазы, в которой деструктор определен как виртуальный? - person jogojapan   schedule 30.12.2012