欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

托管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()方法,然后你就可以得到一个机会去清理和释放资源了。