2009-05-29 60 views

回答

2

是的,有些語言。當C++/CLI的非堆分配超出範圍時(有效地爲它們提供與正常C++中的堆棧分配資源相同的語義),將向IDisposable實現者發出Dipose調用。此外,〜Classname的C++/CLI析構函數語法成爲Dispose的實現(並使類實現IDisposable)。

隨着時間的推移,我希望有傳統確定性破壞的其他語言來採用這個策略。正如其他人所提到的,你可以在C#中用「using」來模擬它,但它不完全相同。

1

如果它實現了IDisposable,並且您正在使用使用塊,當然。

3

如果需要清理內存以外的資源,實現IDisposable與using塊創建對象號。如果你需要清理內存,你真的可以把它留給垃圾收集器。

0

不,沒有。

0

不,在任何.NET語言中都沒有確定性的定稿。垃圾收集器負責完成應用程序中沒有根的對象。

+1

雖然他並沒有詢問最終定稿的問題,但他詢問是否被通知。如果你使用C++/CLI(VS2005中首次出現的託管C++的後繼者)編程,那麼你可以聲明一個對象的引用,就好像它是一個自動變量。如果該對象的類實現了IDisposable,它將在超出範圍時通知它。這是C#恕我直言中遺漏的功能。 – U62 2009-05-29 18:25:00

0

如果實現IDisposable,你的Dispose()方法會發現:

using (var c = new YourClassImplementsIDisposable()) 
{ 
    // Stuff happens 
} 
// c.Dispose has been called 

否則就沒有,因爲你的目標只是 '掛出',直到GC