2012-06-11 72 views
8

this參數調用析構函數中的某個函數是否有效? 函數不存儲指針,但假定爲全功能對象。在析構函數中使用「this」

+1

中使用this完全有效直到DTOR的最後一行爲止該對象是完全有效的。當然,如果DTOR本身撕下對象的部分(例如,刪除ptr等等),那麼你正在拍攝自己的腳,但完全是你的代碼,而不是cpler產生的東西...... –

回答

14

this在析構函數中仍然有效。

但是,您需要記住虛擬功能不再適用正如您可能預計一旦對象被銷燬一樣;見例如Never Call Virtual Functions during Construction or Destruction。本質上,對象的動態類型在每個析構函數完成時都會被修改。

+4

他們**做**好好工作。只是正確工作職能的定義是不同的。我的意思是 - 他們按設計工作。 – valdo

+1

@valdo:公平點!我修改了我的答案...... –

+2

或者無論如何,委員會對「正常工作」的定義在實踐中並不是非常有用。我確信有可能發明一些用例,在這種用例中你想調用基本ctor/dtor中虛擬函數的基類版本,並且委員會有這樣的想法。否則,他們會給予執行更多的自由,並且只是說撥打電話是UB。這可能會更有效,因爲實現不必隨着每個dtor完成而不斷調整vtable指針(或等價物)。事實上,我們支付我們不使用的東西。 –

2

總之一句話:是的。
在D`TOR