我是团队的新成员,我在下面阅读代码。我想知道我需要在dctor中调用SafeArrayUnLock吗?我试图在网上搜索没有明确的线索。非常感谢你的帮助!
代码:
class Trasaction
{
private:
CComSafeArray m_saCache;
public:
//ctor
Transaction(CComQIPtr<Reader>& pReader)
{
//This call need a SAFEARRAY** as its 3rd parameter
pReader->ReadData(start, size, &m_saCache);
SafeArrayLock(m_saCache.m_psa);
}
};
答案 0 :(得分:1)
当您通过CComSafeArray(一个RIIA)类保持SAFEARRAY对象时,它将SafeArray保持在锁定状态 - 当您直接修改指针而不是调用Attach方法时,您必须显式调用SafeArrayLock。但是你不必在析构函数中调用unLock,因为CComSafeArray的析构函数会执行解锁。
为了避免将来再次怀疑对SafeArrayLock的虚假调用和缺少的SafeArrayUnLock - 我建议使用CComSafeArray的Attach方法,首先在普通的SAFEARRAY *中获取返回值。