170 похожих чатов

Как компилятор понимает деструкторы каких объектов надо вызвать при очистке

стекового фрейма?
Например выбрасывается исключение. Как он генерирует код так, чтобы вызвались деструкторы созданных объектов?

21 ответов

10 просмотров

Пишете код, засовываете в godbolt.org, смотрите что именно сделал компилятор

Попробуйте почитать тут https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html#cxx-abi

у всех объектов есть деструкторы, они и вызываются

serfcity -fsanitize=undefined,address
Дефолтные не вызываются.

с чего это вдруг?) что-либо же создается, значит удаляется тоже

Умеет сравнивать RSP/RIP и точки вызова конструкторов

serfcity--fsanitize=undefined,address Автор вопроса
Aleksander Spichak
Вполне себе вызываються

В дефолтном вызываются деструкторы членов класса?

Dmitriy [Отпуск]
(нет)

Ну он генерируеться на основе деструкторов подобьектов. Так что формально - вызывается. Будь то имплицитно или ехплицитно написанным

Aleksander Spichak
Ну он генерируеться на основе деструкторов подобье...

Речь о том, что компилятор не генерирует "пустой деструктор", а умеет определить, какие нужно вызвать

serfcity -fsanitize=undefined,address
Дефолтные не вызываются.

не вызываются тривиальные, а не дефолтные

Компилятор генерирует код функции и знает, какие объекты ему надо создать из кода программы. Поэтому при выходе из функции он также знает, какие объекты ему надо "удалить" - чьи деструкторы вызвать. Ну и конечно запоминает, какие конструкторы уже сработали, а какие ещё нет.

Но кстати, а у тебя есть вопросы, как компилятор разбирается с вызовом деструкторов в таком коде? void Foo() { Kek x; Lol y; if (...) { Kek x2; if (!Bar()) { return; // у кого позвать деструкторы вот тут? } } }

serfcity--fsanitize=undefined,address Автор вопроса
Aleksander Spichak
У всех

Ну в этом примере у всех, но в общем случае не у всех же.

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
48
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Ребята, а из API геокодеров (по адресам в РФ) что сейчас актуального и есть ли среди актуального бесплатное/с нормаотным лимитом запросов? ситуация простая - на сайте периоди...
Dreamer_0x01 VeseloV
8
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
кто шарит: mattermost отслеживает что ты на пк запускаешь?
Valentin
13
Карта сайта