Ваш вопрос не имеет смысла.
Почему бы не пропустить побочные эффекты (так как деструктор не вызывается) и программа работает нормально, без применения побочных эффектов?
Они пропущены, потому что они были бы вызваны деструктором, и он не был вызван.
Мое чтение:
и любая программа, зависящая от побочных эффектов, создаваемых деструктором, имеет неопределенное поведение.
просто, я рассматриваю это в свете RAII. Пример:
#include "Object.hpp"
struct Manager: private boost::noncopyable {
union Raw {
char _[sizeof(Object)];
Object o;
};
static Raw raw;
Manager() { new (raw.o) Object(); }
~Manager() { raw.o.~Object(); }
};
Теперь, если я выделю Manager
, забуду уничтожить его и выделю новый, я в затруднении, потому что я перезаписываю хранилище первого созданного Object
вторым, даже если это все еще "жив". Это неопределенное поведение.