C++/CLI中的资源清理(Destructor,Finalizer)

本文探讨C++/CLI中的资源清理,重点在于析构器(Destructor)和终结器(Finalizer)。析构器在对象不再使用时手动释放资源,而终结器在垃圾回收器回收内存前调用。C++/CLI同时支持两者,解决了ISO C++和.NET平台的不足。文章还介绍了如何通过析构器调用终结器避免代码重复,以及如何保证与.NET平台其他语言的兼容性。
摘要由CSDN通过智能技术生成

转自酷网动力(www.ASPCOOL.COM)

在清闲之余,在此与大家探讨一下,C++/CLI中的资源清理。本文将分成三部分,他们分别是引言、Destructor,Finalizer的语法表示、如何保证Destructor,Finalizer与其他语言兼容。
  一、 引言
   资源是一个很大的范畴,先让我确定一下我们这里谈论的资源包括哪些内容。这里专指在面向对象编程中一个对象实例所使用的资源,他包括对象本身所占有的内存(对象占有内存的大小由对象字段成员来决定,字段成员越多占有的内存就越大)以及其字段成员(Field member)所使用的资源,如文件句柄,数据库链接等等。相信大家比我到清楚在一个对象不再被使用时应该释放其占有的资源,在清理对象所占有的内存之前,执行一个特定的函数,释放字段成员所使用的资源。比如一个文件对象,我们在delete之前得调用Close函数。C++/CLI中的析构器(Destructor)、终结器(Finanlizer)便扮演这个特定函数的角色。在探讨这两个函数之前我们先回忆一下与C++/CLI有着一定关系的ISO C++与.NET平台(ISO C++是他的前辈,并且C++/CLI对ISO C++是兼容的,他们的兼容性已超出本文范围,我们可以在往后再一起讨论;.NET平台是C++/CLI的运行平台),看看他们俩是如何完成资源清理的,这样能够帮助我们更好地理解C++/CLI中的资源清理。
  
   ISO C++面对的是无虚拟机环境,直接根操作系统或是硬件打交道,资源的回收必须由程序员完成,即在某个对象不再使用时得手动地进行资源释放。如果是栈对象则在超出作用域时会自动调用析构器,同时释放对象自己所占有的内存;若是堆对象,只有程序员使用delete pointer 时才会调用pointer所指向对象的析构器,接着释放pointer所指向对象的内存。
  
   .NET平台的一个主要特点是,托管内存,内存的回收交给垃圾回收器(GC)来管理。它会检测到哪些对象不再被使用,便回收其所占用的内存。如果该对象所属的类型实现了Finalize()函数,则会在回收内存之前调用该函数。Finalize函数的作用与ISO C++中的析构器作用类似,在对象被销毁之前释放其字段成员使用的其他资源。
  
   比较一下ISO C++与.NET平台的资源清理,我们不难发现,ISO C++的资源清理是手动的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值