0

我有一个成员对我的课:如何AddRef()nsCOMPtr用作出参数?

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

我有这样做的方法:

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

但壁虎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

您只需更改指令顺序:

*aSomeInterface = someInterface_; 
NS_IF_ADDREF(*aSomeInterface); 

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

+0

感叹。是的,那将是显而易见的事情。 :) – 2011-12-14 22:26:34