托管c++中的资源管理--- "~"和"!"符号的作用
2018-02-11 14:19
337 查看
写过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()方法,然后你就可以得到一个机会去清理和释放资源了。
{
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()方法,然后你就可以得到一个机会去清理和释放资源了。
相关文章推荐
- "Modern C++"为什么采用泛型编程
- "const T " VS "T const " VS const 作用汇总
- 多继承实现COM类中的"菱形问题" C++也有一样的菱形问题
- extern和extern“c"作用详解 以及C和C++混合编程 在文章:3.深层揭密extern "C" 部分可以看到
- "Coding在西元前"--写给所有热爱C++的朋友
- 用C实现C++的多态---剖析GTK的"对象" (三)
- <meta name="description" content=">作用讲解
- DLL编程中的"error LNK2001: 无法解析的外部符号"错误
- "The Design and Evolution of C++" 阅读笔记
- C&C++(1) - extern "C"的作用
- "ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法
- IIS7.0+was 托管使用"NetTcpBinding"等会话服务的wcf程序
- "ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法
- 无符号字符型(unsigned char)和".2X"(和一般"%5.2f"不一)以及结合两者的例子
- 用C实现C++的多态---剖析GTK的"对象" (四)
- 连表查询时" (+) "的神奇作用~!
- "数组引用"以避免"数组降阶"(c++)
- "Bundle versions string, short" 跟 "Bundle version" 的区别及作用
- iOS添加非(c,c++)文件引发的"NSObjCRuntime.h"错误
- Unity3D游戏开发之从"复活"和"暂停/恢复"谈游戏数据配置管理