https://stackoverflow.com/a/6614369/1091587简要介绍了当您阅读使用“gcc3”类型名称修饰编译的程序的符号表时出现的析构函数类型(D0、D1、D2)。还有对应的构造函数C0/C1/C2。对于 g++-4.7(可能更早),出现了一个新的 ctor/dtor 对,即 C5/D5,但仅作为调试符号。
$ cat i.cpp
class X { public: virtual ~X() {}; };
int main(void) { X x; return 0; };
$ g++ -c i.cpp
$ nm i.o | grep 5
0000000000000000 n _ZN1XC5Ev
0000000000000000 n _ZN1XD5Ev
$ c++filt -n _ZN1XC5Ev _ZN1XD5Ev
X::X()
X::~X()
demangler 源将 D5 对象称为“gnu_v3_object_dtor_group”,但 dtor 组到底是什么,它有什么用处?clang++-3.3 不会发出它,并且http://gcc.gnu.org/ml/gcc-patches/2011-11/msg00383.html表明它可能与 gcc 中的新事务内存功能有关。