На этот вопрос встает вопрос: Correct way to inherit from a virtual class with non-virtual parent.Правильный способ унаследовать от виртуального класса с не виртуальным родителем продолжение
Насколько я понимаю, что в случае, описанном в вопросе, три и две части нового выделенного объекта протекают, потому что они не разрушаются?
Источник:
#include <iostream>
struct One
{
~One() {
std::cout << "~One()\n";
}
};
struct Two : One
{
virtual ~Two() {
std::cout << "~Two()\n";
}
virtual void test() = 0;
};
struct Three : Two
{
virtual ~Three() {
std::cout << "~Three()\n";
}
virtual void test() {
std::cout << "Three::test()\n";
}
};
int main()
{
Two* two = new Three;
two->test();
One* one = two;
delete one;
}
Да, это правильно. Я просто [ответил на аналогичный вопрос] (http://stackoverflow.com/questions/8764353/what-does-has-virtual-method-but-non-virtual-destructor-warning-mean-durin/8764393#8764393) вчера , –
Не могли бы вы изменить свой вопрос, включив контекст, чтобы нам не нужно было следовать ссылке, чтобы узнать, что такое «два» и «три». –
@OliCharlesworth сделано – inf