не спрашивайте зачем мне это нужно
действительно. 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.