Жизнь после деструктора
От: Lis182 Россия  
Дата: 22.10.20 17:12
Оценка: :)
Добрый день! По моему опыту, тут много "формалистов" (в хорошем смысле) по поводу стандарта Си(++). Постараюсь максимально упростить вопрос, в реальности проблема немного сложнее. Приведем псевдокод, в котором собственно вопросы в комментариях.


struct SMyStruct // Простейшая структурка с одним полем
{
    int val;     // Поле, чтоб структура не была совсем пустой
    ~SMyStruct() // Деструктор
    {
        val = 321; // Что-то делаем (что именно не важно). Важно, что это действие можно повторять много раз, если под объект выделена память.
    }
};

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