Как мне добавить 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 делают это.