Добрый день! По моему опыту, тут много "формалистов" (в хорошем смысле) по поводу стандарта Си(++). Постараюсь максимально упростить вопрос, в реальности проблема немного сложнее. Приведем псевдокод, в котором собственно вопросы в комментариях.
struct SMyStruct // Простейшая структурка с одним полем
{
int val; // Поле, чтоб структура не была совсем пустой
~SMyStruct() // Деструктор
{
val = 321; // Что-то делаем (что именно не важно). Важно, что это действие можно повторять много раз, если под объект выделена память.
}
};
{
SMyStruct obj; // выделяем память (обычно на стеке) под фактически один int
obj.~SMyStruct(); // Явно вызываем деструктор
obj.val = 123; // Это правомерно? Т.е. указатель стека обязан не увеличиваться на siseof(int) после предыдущей строки?
} // Тут в любом случае вызовется деструктор, которому передастся this. Собственно, вопрос тот же, обязан ли компилятор держать в памяти объект до этого места