簡體   English   中英

C++/CLI 中的感嘆號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM