[英]Exclamation mark in C++/CLI
我正在閱讀 Microsoft 的這篇文章,內容是如何將托管類編組為本機類,反之亦然,我遇到了以下幾行:
this->;context_node();
protected: !context_node() { // method definition }
我在 Google 和 StackOverflow 上搜索了上述代碼段中感嘆號 ( !
) 的含義,但我一無所獲,所以我在這里問是否有人可以對此有所了解。
提前感謝任何會回答的人。
!classname()
是終結器。
由於這些是托管類,它們的生命周期由垃圾收集器控制。
如果你實現一個方法~classname()
,那就是 Dispose 方法,因為它是 C++/CLI。 它不是像普通 C++ 那樣的析構函數。 如果您實現它,編譯器會自動使您的 class 實現 IDisposable,並調用從 C++/CLI 中delete
或在Dispose
中調用該方法。
如果你實現了一個方法!classname()
,那就是終結器。 垃圾收集器在清理 object 時會自動調用該方法。
在您鏈接到的示例中,他們也有這個:
public:
~context_node()
{
this->!context_node();
}
protected:
!context_node()
{
// (Step 7) Clean up native resources.
}
因此,這是一個 Dispose 方法 ( ~
),它顯式調用 Finalizer 方法 ( !
),因此沒有代碼重復。 這樣,既可以顯式調用delete
(或使用堆棧語義,同樣的事情),也可以等待垃圾收集器清理它,無論哪種方式,本機資源都會被正確清理。 如果您有任何托管資源,則只能在 Dispose 方法中清理它們,而不是在終結器中。 (C++/CLI 編譯器知道如何正確實現 IDisposable 模式,因此它知道在調用 Dispose 方法時抑制終結器。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.