只是出於好奇,我試圖做下面的例子,看看編譯器是否給我一個警告,所以不要調用一個以堆棧溢出結束的無限循環。我想也許有一種不同於只調用普通函數或方法的行爲。但事實並非如此。有沒有特別的解釋呢,還是隻是作爲正常的函數調用來處理,因爲我通過使用this
運算符顯式調用基類析構函數?編譯器如何處理派生析構函數中的基類析構函數調用?
例子:
class A {
virtual ~A();
};
class B : A {
virtual ~B() { this->~A(); }
};
'virtual void〜A();' - 這不應該編譯,析構函數不返回任何東西,並且普通的方法名稱不能包含tilda。 – yeputons
@yeputons right,sry,is typo –
它會通過調用'〜A()'兩次導致未定義的行爲(因爲有一個隱含的調用,一旦'〜B()'的主體退出) –