2016-11-05 54 views
0

在C++中,是否可以從析構函數中調用非成員函數(自由函數或其他對象的成員)?我正在調用一個不同類的對象的方法(非虛擬方法,儘管在這種情況下應該不是很重要)。此方法在嘗試訪問其成員時崩潰。正在從析構函數調用非成員函數嗎?

另一方面,如果這個不同的對象是被破壞的對象(Qt)的子對象,這是否重要?

+2

爲什麼它不應該好嗎?該錯誤必須在其他地方。 (但請注意,在析構函數中不應該有未被捕獲的異常)。 (並且從另一個類繼承的一個類不應該改變任何東西) – deviantfan

+0

繼承對象從上到下被銷燬。因此,試圖訪問屬於基礎對象的析構函數內的繼承對象的東西是未定義的行爲。 – 101010

+1

只要它不是虛擬功能,就應該沒問題。 –

回答

3

通常,析構函數可以調用它需要的任何函數來正確銷燬對象。但是,有幾個需要注意的地方:

  1. 如果從析構函數調用的函數拋出一個異常,異常必須被捕獲並在析構函數來處理。

  2. 從析構函數調用的函數不能無條件地創建和銷燬析構函數所屬類型的對象(因爲這會導致無限遞歸)。

相關問題