C++ C+中的成员CComPtr+/CLR类
我正在编写一个C++/CLI类,它需要在生命周期内保持C++ C+中的成员CComPtr+/CLR类,c++,com,clr,C++,Com,Clr,我正在编写一个C++/CLI类,它需要在生命周期内保持CComPtr,例如 public ref class MyClass { public: MyClass() { CComPtr<ISomeType> pSomeType; // init someType; m_pSomeType = pSomeType; } private: CComPtr<ISomeType> m_pSomeTy
CComPtr
,例如
public ref class MyClass
{
public:
MyClass()
{
CComPtr<ISomeType> pSomeType;
// init someType;
m_pSomeType = pSomeType;
}
private:
CComPtr<ISomeType> m_pSomeType;
void DoSomething()
{
m_pSomeType->DoSomething();
}
}
这在我看来很糟糕,我也怀疑这在某种程度上是错误的(我来自C#背景,所以我在学习的过程中学到了很多)
如何将
CComPtr
作为C++/CLR类的成员“存储”起来?如果要分别编译托管代码和非托管代码,则是一个链接
使用它,您可以保留两者的味道。我制作了一个智能指针,可能会对您有所帮助。它不能直接用于管理COM指针,但可以用于在托管类中保存CComPtr
(*m_pSomeType)->DoSomething();
而不是复制CComPtr
(它必须更新引用计数)
除此之外,我将使用ctor初始值设定项列表,而不是构造函数中的赋值
MyClass()
: m_pSomeType(new CComPtr<ISomeType>)
{
}
MyClass()
:m_pSomeType(新CComPtr)
{
}
这看起来非常类似于我已经在使用的AutoPtr
类,除非它提供了一些我没有看到的优点?@Justin:我的比Kenny Kerr的AutoPtr
好,就像std::unique\ptr
和boost::scope\ptr
比std::auto\ptr
好一样。他从std::auto_ptr复制了所有的设计缺陷。好吧,听起来我需要仔细阅读一下。我应该如何将这些智能指针与CComBPtr(及相关)类型一起使用?我所用的方法行吗,还是有更好的方法?
MyClass()
: m_pSomeType(new CComPtr<ISomeType>)
{
}