Почему C3-распределители никогда не используются?
Некоторые из нас знают, что для объекта C++ возможно несколько конструкторов, C1 и C2. Но источники GCC говорят, что может быть третий вариант конструктора, C3 "конструктор полного выделения объектов" (проверьте gcc-4.8/gcc/cp/mangle.c
файл перед write_special_name_constructor
функция):
1645 /* Handle constructor productions of non-terminal <special-name>.
1646 CTOR is a constructor FUNCTION_DECL.
1647
1648 <special-name> ::= C1 # complete object constructor
1649 ::= C2 # base object constructor
1650 ::= C3 # complete object allocating constructor
1651
1652 Currently, allocating constructors are never used. <<<<<
1653
1654 We also need to provide mangled names for the maybe-in-charge
1655 constructor, so we treat it here too. mangle_decl_string will
1656 append *INTERNAL* to that, to make sure we never emit it. */
Почему C3 может быть необходим, но не используется GCC? Есть ли популярный компилятор C++, который генерирует конструкторы C3?
Документируется ли C3 в каком-либо ABI pdf?
1 ответ
Идея в том, что C3
это оптимизированная версия ::operator new(sizeof(class))
с последующим C1
то есть предварительно встроенная версия. GCC должен создать его в случае, если его использует другой компилятор. Это, очевидно, может зависеть от встроенных решений, которые, как правило, нетривиальны.