托管c++中的资源管理--- "~"和"!"符号的作用
程序员文章站
2022-03-02 14:16:37
...
写过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()方法,然后你就可以得到一个机会去清理和释放资源了。