我正在编写一个C++/CLI类,它需要在其生命周期的持续时间内保留到CComPtr
,例如,在C++/CLR类中的成员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();
}
}
然而,这并不编译为混合型,不支持 - 该解决方案是使用AutoPtr
。我仍然需要参考计数,所以这是我想出的。
public ref class MyClass
{
public:
MyClass()
{
CComPtr<ISomeType> pSomeType;
// init someType;
m_pSomeType = new CComPtr<ISomeType>(pSomeType);
}
private:
AutoPtr<CComPtr<ISomeType>> m_pSomeType;
void DoSomething()
{
CComPtr<ISomeType> pSomeType = *m_pSomeType.GetPointer();
pSomeType->DoSomething();
}
}
这看起来讨厌我,我也怀疑它在某些方面(我来自一个C#背景,使我有种学习了很多这方面,因为我去)错了。
我应该如何将“CComPtr
”存储为C++/CLR类的成员?
这看起来非常类似于我已经使用的'AutoPtr'类,除非这提供了我没有看到的一些优点? – Justin 2012-08-06 16:46:04
@Justin:和'std :: unique_ptr'和'boost :: scoped_ptr'比'std :: auto_ptr'好一样,Mine比Kenny Kerr的'AutoPtr'要好。他复制了'std :: auto_ptr'的所有设计缺陷。 – 2012-08-06 16:52:22
好吧,听起来像我需要阅读。我应该如何将这些智能指针与CComBPtr(及相关)类型一起使用?我使用的方法是否正确,还是有更好的方法? – Justin 2012-08-06 16:54:21