Почему C3-распределители никогда не используются?

Некоторые из нас знают, что для объекта C++ возможно несколько конструкторов, C1 и C2. Но источники GCC говорят, что может быть третий вариант конструктора, C3 "конструктор полного выделения объектов" (проверьте gcc-4.8/gcc/cp/mangle.c файл перед write_special_name_constructor функция):

http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/cp/mangle.c;h=10c2e2beb0c422e4f56e17e7659fbeb4ab3ee31b;hb=refs/tags/gcc-4_8_1-release

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 должен создать его в случае, если его использует другой компилятор. Это, очевидно, может зависеть от встроенных решений, которые, как правило, нетривиальны.

Другие вопросы по тегам