Нужно ли вызывать SafeArrayUnLock в этом коде?

Я новый член команды и читаю код ниже. Интересно, нужно ли вызывать 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

Решение

Поскольку вы держите объект SAFEARRAY через класс CComSafeArray (RIIA), который сохраняет SafeArray в заблокированном состоянии, и когда вы изменяете указатель напрямую, а не вызываете метод Attach, вы должны явно вызывать SafeArrayLock. Но вам не нужно вызывать unLock в деструкторе, потому что деструктор CComSafeArray будет делать Unlock.

Чтобы в будущем не возникало новых сомнений в отношении ложного вызова SafeArrayLock и отсутствующего SafeArrayUnLock, я предлагаю использовать метод Attach в CComSafeArray, сначала взяв возвращаемое значение в виде простого SAFEARRAY *.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]