0

我的班级有一名成员:

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

我有这样做的方法:

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

但是 Gecko 9 强制你不能调用AddRef()or Release()on nsCOMPtr<>s。所以现在我正在这样做:

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

但是直接访问原始指针让我觉得很脏。AddRef()在吸气剂中取出参数的正确方法是什么?

文档没有帮助。

4

1 回答 1

1

您只需更改指令顺序:

*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);

*aSomeInterface是一个原始指针,因此您可以NS_IF_ADDREF在其上使用。大多数 Gecko 代码似乎就是这样做的。

于 2011-12-14T08:28:58.443 回答