C++ вызов деструктора при изменяющимся типе
Столкнулся с проблемой вызова деструктора в структуре, где тип данных может меняться. Чтобы удалить переменную b
в структуре надо явно прописать это в деструкторе. Если T
будет указателем, то надо писать delete b
, если переменной, то delete &b
.
class B {
public:
virtual ~B() { cout<<"B"; }
};
class D : virtual public B {
public:
~D() { cout<<"D"; }
};
template <typename T>
struct S {
S() {}
T b;
~S() { cout<<"S"; }
};
int main() {
S<B*> s = S<B*>();
s.b = new D;
s.~S(); //выводит только "S"
return 0;
}
Если запустить код то выведется только "S". Как написать чтобы работало во всех случаях?