C++ 我需要在此代码中调用SafeArrayUnLock吗?

C++ 我需要在此代码中调用SafeArrayUnLock吗?,c++,safearray,C++,Safearray,我是团队的新成员,我阅读了下面的代码。我想知道我需要打电话给dctor中的SafeArrayUnLock吗?我试图在没有明确线索的情况下在网上搜索。非常感谢你的帮助 代码: 类传输 { 私人: 米乌萨卡奇; 公众: //执行器 事务(CComQIPtr和预订单) { //此调用需要一个SAFEARRAY**作为其第三个参数 预订单->读取数据(开始、大小和m_saCache); Safearaylock(m_saCache.m_psa); } }; 当您通过CComSafeArray(RIIA)

我是团队的新成员,我阅读了下面的代码。我想知道我需要打电话给dctor中的SafeArrayUnLock吗?我试图在没有明确线索的情况下在网上搜索。非常感谢你的帮助

代码:

类传输
{
私人:
米乌萨卡奇;
公众:
//执行器
事务(CComQIPtr和预订单)
{
//此调用需要一个SAFEARRAY**作为其第三个参数
预订单->读取数据(开始、大小和m_saCache);
Safearaylock(m_saCache.m_psa);
}
};

当您通过CComSafeArray(RIIA)类持有SAFEARRAY对象时,该类将SAFEARRAY保持在锁定状态。当您直接修改指针而不是调用Attach方法时,您必须显式调用SafeArrayLock。但是您不必在析构函数中调用unLock,因为CComSafeArray的析构函数将执行解锁


为了避免将来对SafeArrayLock的虚假调用和丢失的SafeArrayUnLock产生进一步的怀疑,我建议使用CComSafeArray的附加方法,首先在普通的SAFEARRAY中获取返回值*

“我是团队的新成员”-您是否与团队成员交谈?不。代码没有意义,也许这是一个bug解决方法。查看登记历史记录。@MitchWheat从队友那里得到答案,Ray的析构函数里面有一个解锁。
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);
    }

};