Как добавить AddRef () в nsCOMPtr для использования в качестве параметра out? - PullRequest
0 голосов
/ 14 декабря 2011

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

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<> с. Так что теперь я делаю это:

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

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

Документация не помогла.

1 Ответ

1 голос
/ 14 декабря 2011

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

*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);

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

...