【问题标题】:How do I AddRef() an nsCOMPtr for use as an out param?如何 AddRef() 一个 nsCOMPtr 用作输出参数?
【发布时间】:2011-12-13 23:19:12
【问题描述】:

我的班级有一个成员:

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

我有这样做的方法:

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

但 Gecko 9 强制您不得在 nsCOMPtr&lt;&gt;s 上调用 AddRef()Release()。所以现在我正在这样做:

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

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

documentation 没有帮助。

【问题讨论】:

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


    【解决方案1】:

    您只需更改指令顺序:

    *aSomeInterface = someInterface_;
    NS_IF_ADDREF(*aSomeInterface);
    

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

    【讨论】:

    • 叹息。是的,这将是显而易见的事情。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多