Является ли законным разрушать и создавать объект базового класса для восстановления части состояния, известного базовому классу?Является ли законным явное вызов деструктора/конструктора класса?
class C : public BaseClass {...};
C c;
c.BaseClass::~BaseClass();
new (static_cast<BaseClass*>(&c)) BaseClass;
Очевидно, что есть другие способы достижения этого эффекта, если у нас есть доступ к исходному коду классов. Однако я хочу знать с точки зрения языка, если есть определенная причина, по которой это неверно.
№ Для начала нет гарантии, что '& c' совпадает с адресом своего подобъекта базового класса. –
Справедливая точка. Я добавил актерский состав. –
Метод 'restore 'в базовом классе не будет? Это звучит как проблема X-Y. – sp2danny