Информация об изменениях

Сообщение Re[12]: Жизнь после деструктора от 22.10.2020 22:06

Изменено 22.10.2020 22:07 σ

Re[12]: Жизнь после деструктора
MA>>> Ознакомься наконец с устройством компилятора, а не выплескивай тут свою охинею.
L>>Это не мое Вопрос был про обязанность сохранять область памяти под объект до выхода из области видимости. Естественно, если оптимизатор много повыкидывает, но это на работоспособности сказываться не должно. Скажем еслиб деструктор вообще пустым был.
MA> Так я и не тебе же ответил про негатив.

MA> Ну тебе уже ответили в принципе то, в плане, что твой юз-кейс формально является UB.


MA> Другое дело, что, компилятор натуральным образом с этой ситуацией особо ничего не может поделать (вообще-то может, например генерировать ворнинг или ошибку, но это же не будет соответствовать духу патриотизма C++), и генерируется такой псевдокод:


MA>
MA>stack obj = SMyStruct::SMyStruct();
MA>obj.~SMyStruct();
MA>obj.val = 123;
MA>obj.~SMyStruct();
MA>


MA> Как видишь, тут очень даже ясное время жизни и памяти и всего остального. И, лишь в результате оптимизаций методы могут быть "не выброшены", а, вырождены, в результате инлайнинга. Но, т.к. в реальной жизни, ты говоришь, что там у тебя вызов содержит CloseHandle, то он разумется никуда его не выбросит


Ой-вей, ты вообще читать умеешь? Выбрасывается не вызов CloseHandle, а присвоение после него. Выбрасывается безо всяких инлайнингов. https://godbolt.org/z/9EYKK6
Re[12]: Жизнь после деструктора
MA> И, лишь в результате оптимизаций методы могут быть "не выброшены", а, вырождены, в результате инлайнинга. Но, т.к. в реальной жизни, ты говоришь, что там у тебя вызов содержит CloseHandle, то он разумется никуда его не выбросит

Ой-вей, ты вообще читать умеешь? Выбрасывается не вызов CloseHandle, а присвоение после него. Выбрасывается безо всяких инлайнингов. https://godbolt.org/z/9EYKK6