C++ C+中的成员CComPtr+/CLR类

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

我正在编写一个C++/CLI类,它需要在生命周期内保持
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>)
{
}