Как мне добавить AddRef() nsCOMPtr для использования в качестве выходного параметра?

У меня есть участник для моего класса:

class MyNativeXPCOMObject ... {
    ...
private:
    nsCOMPtr<nsISomeInterface> someInterface_;
    ...
};

У меня есть методы, которые делают это:

NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
    NS_IF_ADDREF(someInterface_);
    *aSomeInterface = someInterface_;
    return NS_OK;
}

Но Gecko 9 заставляет вас не разрешать звонить AddRef() или же Release() на nsCOMPtr<>s. Итак, теперь я делаю это:

NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
    NS_IF_ADDREF(someInterface_.get());  // <--- Added .get()!
    *aSomeInterface = someInterface_;
    return NS_OK;
}

Но прямой доступ к необработанному указателю заставляет меня чувствовать себя грязным. Какой правильный способ AddRef() для параметров в геттеры?

Документация не была полезной.

1 ответ

Решение

Вы просто меняете порядок команд:

*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);

*aSomeInterface это необработанный указатель, так что вы можете использовать NS_IF_ADDREF в теме. Вот как большинство кодов Gecko делают это.

Другие вопросы по тегам