gcc -fdump-tree-original 的输出

Job*_*Job 5 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) >>>
>>;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是:“ ”后面的代码位于哪里<D.20148>:;?它位于析构函数之外,那么该代码何时执行?

Mar*_*k B 5

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