託管c++中的資源管理--- "~"和"!"符號的作用
阿新 • • 發佈:2019-02-03
寫過c++程式的朋友應該都知道解構函式的定義方法,舉例如下:
class CSomeClass
{
public:
CSomeClass();
~CSomeClass();
private:
LPCTSTR m_szBuffer;
};
帶有~符號的,就是解構函式,一般來說,我們會在解構函式裡做資源的釋放和清理工作,在託管c++裡,也是如此,不過如果僅僅在解構函式裡做資源的釋放,那麼就必須要按照如下方式來呼叫:
using (CSomeClass someClass = new CSomeClass())
{
}
否則一旦忘記這樣做了,就有可能造成記憶體洩漏,但是在.net下的開發,記憶體都是託管的,由垃圾回收器自動管理,那麼如何才能解決上面碰到的可能忘記呼叫Dispose介面函式的問題呢?
這個時候微軟提供了一個符號,對就是歎號!
public ref class CSomeClass
{
public:
CSomeClass();
virtual ~CSomeClass();
!CSomeClass();
private:
LPCTSTR m_SomeStr;
};
這個時候,只需要向如下所示的一樣直接new就可以了,
CSomeClass someClass = new CSomeClass();
用完就不管了,垃圾回收器會自動呼叫!CSomeClass()方法,然後你就可以得到一個機會去清理和釋放資源了。