0

내 클래스의 멤버를 가지고 :out 매개 변수로 사용할 nsCOMPtr을 AddRef()하는 방법은 무엇입니까?

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

나는 이렇게 방법이 있습니다

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

하지만 게코 (9) 당신이 nsCOMPtr<>들에 AddRef() 또는 Release()를 호출 할 수 없습니다 있다는 것을 적용합니다. 이제는 다음과 같이합니다 :

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

그러나 직접 원시 포인터에 액세스하면 더러운 느낌이 들게됩니다. getters에서 out 매개 변수에 대한 AddRef()의 적절한 방법은 무엇입니까?

documentation은 도움이되지 않았습니다. 당신이 그것에 NS_IF_ADDREF을 사용할 수 있도록

*aSomeInterface = someInterface_; 
NS_IF_ADDREF(*aSomeInterface); 

*aSomeInterface 원시 포인터 :

답변

1

당신은 단순히 명령 순서를 변경합니다. 그것이 대부분의 Gecko 코드가하는 것처럼 보입니다.

+0

한숨. 예, 그렇게하는 것이 뻔한 일입니다. :) –

관련 문제