If I dump the code generated by GCC for a virtual destructor (with -fdump-tree-original), I get something like this:
;; 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) >>>
>>;
}
My question is: where is the code after "<D.20148>:;
" located? It is outside of the destructor so when is this code executed?
That looks like the compiler-generated code to manage the actual memory deallocation after the destructor is called and should execute right after your destructor code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With