не спрашивайте зачем мне это нужно
действительно. C++ ABI -- это боль, сильная боль. Даже разработчики компиляторов страдают от неё. Если вам уж прям так важно поковыряться в его кишках, то изучайте исходники LLVM и
спецификацию стандарта ABI. А если нет, то возьмите OpenCV C API и не выносите себе голову.
но описан как функция
А как он должен быть описан, как сферический код в вакууме?
чем отличается от обычных деструкторов
Стандарт определяет деструкторы:
- base object destructor
- complete object destructor
- deleting destructor
- trivial/non-trivial destructor
Что из этого есть "обычный" деструктор?
Здесь про деструкторы и псевдо-код порядка их вызовов.
Здесь -- про общее устройство виртуальной таблицы.
что на самом деле означает `vbase destructor`, в каких случаях он вызывается
Есть предположение, что это имя экспортируемого
complete object destructor
для класса, базовым классом которого является класс с виртуальным деструктором. То есть, он выполняет часть процесса цепочки деструкторов, которая помимо вызова
base object destructor
, вызывает также все деструкторы для всех базовых виртуальных классов. Но при этом ещё не вызван
deleting destructor
, который собственно вызывает
operator delete
. Т.е. получается, что
complete object destructor
по включённому в него списку действий, как бы "наследуется" от
base object destructor
. В свою очередь,
deleting destructor
"наследуется" от
complete object destructor
.
Предполагаю, что вызывается автоматически в замыканиях. Но что на самом деле означает `default constructor closure'
Для чего он может вызываться в замыканиях, просто чтоб было?
Моё же предположение, что это замыкание -- некий адаптер-костыль чтоб привести нетривиальные параметры конструктора в удобоваримую ABI-форму, и вызывается когда
default constructor имеет default
non-trivial parameters, для которых надо сначала вызвать конструктор, либо когда это
variadic конструктор, которому нужно привести список аргументов к Сишному `va_arg`, чтобы переслать их через границу ABI. Вот в этом случае он вызывается, как я понимаю.
Один ценный никому не нужный совет: тебе НЕ НУЖНО в этом разбираться. Брось эту затею и возьми сишный API.