为什么C3分配构造函数从未使用过?

时间:2013-07-18 16:06:26

标签: c++ gcc constructor

我们中的一些人知道C ++对象C1和C2可能several constructors。但是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#l1644

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 个答案:

答案 0 :(得分:2)

我的想法是C3::operator new(sizeof(class))的优化版本,后跟C1,即预先内联版本。 GCC必须创建它以防其他编译器使用它。这显然可能取决于内联决策,这通常是非平凡的。