输出gcc -fdump-tree-original

时间:2010-04-21 17:23:02

标签: c++ gcc g++ internals

如果我将GCC生成的代码转储为虚拟析构函数(使用-fdump-tree-original),我会得到这样的结果:

;; Function virtual Foo::~Foo() (null)
;; enabled by -tree-original

{
  <<cleanup_point <<< Unknown tree: expr_stmt
  (void) (((struct Foo *) this)->_vptr.Foo = &_ZTV3Foo + 8) >>>
>>;
}
<D.20148>:;
if ((bool) (__in_chrg & 1))
  {
    <<cleanup_point <<< Unknown tree: expr_stmt
  operator delete ((void *) this) >>>
>>;
  }

我的问题是:“<D.20148>:;”之后的代码位于何处?它在析构函数之外,所以这个代码什么时候执行?

1 个答案:

答案 0 :(得分:3)

这看起来像编译器生成的代码,用于在调用析构函数之后管理实际的内存释放,并且应该在析构函数代码之后立即执行。