C++ _com_ptr_t类

C++不自带内存回收机制,可能导致内存泄漏。本文聚焦于_Ccom_ptr_t智能指针,它能自动管理COM接口的AddRef和Release,避免此类问题。文章介绍了_Ccom_ptr_t的用途,对比了ATL中的CComPtr,并通过示例说明如何使用_COM_SMARTPTR_TYPEDEF宏创建接口智能指针。此外,还提醒读者注意文档记录的重要性。
摘要由CSDN通过智能技术生成

C++没有类似Java的内存回收机制,每执行一次new,就要手动delete。但是这容易产生很多问题。例如:

string* str=new string("...");

something.....//如果此处的代码出现了异常,导致程序终止。那么delete str便不会被执行。导致内存泄漏。

delete str;

如上例所示,实际编程种有很多种情况容易导致内存泄漏,这种情况并不少见。

可避免此问题的一种方法是使用智能指针。

本文主要介绍 _com_ptr_t 的使用。其实我们看名称就可猜出一二,这是一个模板类,其对象封装COM接口指针。

COM调用,需要手动AddRef,手动Release,大量的对象调用就要重复地执行AddRef,Release操作,容易出问题,写多了还烦人。

_com_ptr_t 是vc运行库中提供的固有的封装COM接口的智能指针,此模板类通过自动调用IUnknown成员函数: QueryInterface, AddRef,和Release来管理资源分配和解除分配。

说到封装COM接口指针的类,还有一个,是ATL种的CComPtr和CComQIPtr,此二者都是模板类,皆用来封装管理COM接口指针。笔者是C++小白,在这里吃了许多亏,一开始懵懵懂懂,稀里糊涂地就在自己的程序中用了CComPtr,后来发现无法在创建CComPtr对象中互相赋值,找到官方文档才知道,如果不是ATL工程,需要用_com_ptr_t而不是CComPtr来管理指针。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值