CCommand的资源管理方式

本文总结了CCommand资源管理的特点,包括使用CAccessor时的注意事项、Close与ReleaseCommand方法的健壮性、析构函数的行为及手动资源管理建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近通过对ATL OLE DB源代码的进一步阅读,在验证了一些猜想的同时也发现了之前对CCommand资源管理方式的某些错误认识。这些认识上的错误可能隐式或显示地反映在了之前的相关博文中。为什么我会产生错误的认识呢?原因是我低估了CCommand的封装程度-_-!!!现将发现总结如下:

1、若CCommand使用CAccessor,则在绑定返回结果时(调用Bind方法)会首先调用memset将接收缓冲区清0。这说明什么了问题呢?举例来说,假设你传递给CAccessor的模板参数为CRecord类。CRecord有个char *p属性。然后你在CRecord的构造函数中动态分配空间给p,企图用它来接收一个字符串。这样做是有问题的,因为p在取得数据前就被memest成0了。
2、Close和ReleaseCommand方法是很健壮的,即使资源已经释放,再次调用也没有问题,方法会直接返回。
3、CCommand的析构函数会依次调用Close和ReleaseCommand。但如果你依赖于析构函数来释放资源,那么请确保在对象析构前没有执行CoUninitialize,否则Runtime Error(所以还是手动释放好些)。
4、调用带SQL命令参数的Open时会自动调用ReleaseCommand。所以除了在最后一次Open后可能需要手动调用ReleaseCommand外无须手动调用。
5、忘掉FreeRecordMemory吧~每次使用CCommand的MoveNext等函数时都会自动调用FreeRecordMemory。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值