我如何将AddRef()作为一个out参数使用nsCOMPtr?

时间:2011-12-13 23:19:13

标签: firefox-addon smart-pointers xpcom reference-counting geckosdk

我有一个班级成员:

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()在吸气剂中使用参数的正确方法是什么?

documentation没有帮助。

1 个答案:

答案 0 :(得分:1)

您只需更改指令顺序:

*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);

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