Programming .NET Components 2nd 学习笔记(三)
2012-07-08 11:37
183 查看
4.2. Traditional Memory De-allocation Schemas
.NET在释放内存和销毁对象上不同于C++、COM。在C++中,一个基于栈的对象离开声明范围时将会销毁:
同样,在C++中使用delete操作符也会销毁对象:
COM使用了引用计数,它会根据客户端增加或减少一个对象的计数器。当客户端共享一个对象时,调用AddRef( )增加计数器。新的COM对象在创建时计数为1。当客户端使用完一个对象后,调用Release( )减少该计数器:
当一个计数等于0时,这个对象将会销毁:
.NET在释放内存和销毁对象上不同于C++、COM。在C++中,一个基于栈的对象离开声明范围时将会销毁:
{//beginning of a C++ scope MyClass object; //use object; }//end of scope, C++ calls the object destructor
同样,在C++中使用delete操作符也会销毁对象:
MyClass* pObject = new MyClass; //using pObject, then de-allocating it delete pObject;
COM使用了引用计数,它会根据客户端增加或减少一个对象的计数器。当客户端共享一个对象时,调用AddRef( )增加计数器。新的COM对象在创建时计数为1。当客户端使用完一个对象后,调用Release( )减少该计数器:
//COM pseudo-code: IMyInterface* pObject = NULL; ::CoCreateInstance(CLSID_MyClass,IID_IMyInterface,&pObject); //using pObject, then releasing it pObject->Release( );
当一个计数等于0时,这个对象将会销毁:
//COM implementation of IUnknown::Release( ) ULONG MyClass::Release( ) { //m_Counter is this class counter m_Counter--; if(m_Counter == 0) { delete this; return 0; } //Should return the counter: return m_Counter; }
相关文章推荐
- Programming .NET Components 2nd 学习笔记(八)
- Programming .NET Components 2nd 学习笔记(一)
- Programming .NET Components 2nd 学习笔记(九)
- Programming .NET Components 2nd 学习笔记(十一)
- Programming .NET Components 2nd 学习笔记(二)
- Programming .NET Components 2nd 学习笔记(十二)
- Programming .NET Components 2nd 学习笔记(七)
- Programming ASP.NET 学习笔记(要点)第3章 控件:基本概念
- Programming .NET Components 2nd 学习笔记(四)
- Programming .NET Components 2nd 学习笔记(五)
- Programming .NET Components 2nd 学习笔记(六)
- Programming .NET Components 2nd 学习笔记(十)
- Programming .NET Components, 2nd Edition [ILLUSTRATED]
- Json(Json.Net)学习笔记
- .net Elasticsearch 学习入门笔记
- Quartz.net 2.x 学习笔记02-Quartz.net 2.x在MVC站点中结合Log4net的使用
- Ado.Net 实体框架学习笔记4
- OSGi.NET 学习笔记 [目录]
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC是如何运行的(五)
- ASP.Net MVC开发基础学习笔记(4):校验、AJAX与过滤器