3
如果我傾倒通過GCC爲虛析構函數生成的(與-fdump樹原創)的代碼,我得到的是這樣的:輸出
;; 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>:;
」後面的代碼在哪裏?它在析構函數之外,所以這段代碼何時執行?
查看程序集輸出後,看起來你是對的。但是你知道爲什麼代碼在析構函數之外顯示,標籤是什麼意思? – Job 2010-04-25 17:18:59
編譯器向您顯示與您所寫的代碼相對應的生成內容。該標籤之後的代碼是自動生成的,實際上是由delete調用引發的,而不是你的析構函數。即使它在析構函數之後被調用,它也不是析構函數代碼的一部分。我不知道標籤的含義。 – 2010-04-26 03:31:44