1

我想知道如何将头文件中的 COM 智能指针定义为类成员?这是做了什么:

  • 在 .cpp 文件中,我有:

    long MyClass:MyFun(long &deviceCount)
    {
        RESULT h = CoInitialize(NULL);
        MyComPtr ptr(__uuidof(MyComClass));
    
        if(deviceCount > 0)
            ptr->Connect();
    }
    

但是由于其他函数需要使用ptr,所以我正在考虑将其更改为类成员并在头文件中定义它,如下所示:

  • 在 .h 文件中:

    MyComPtr _ptr;
    
  • 然后在 .cpp 文件中,我有:

    _ptr(__uuidof(MyComClass));
    

但是编译没有通过,它说“术语不评估为带 1 个参数的函数”。我很困惑如何实现这一点。有任何想法吗?谢谢。

编辑:所以要使用初始化列表,它应该是这样的吗?

MyClass:MyClass() : _ptr(new MyCom)
{
    _ptr(__uuidof(MyComClass));
}
4

1 回答 1

1

在构造时调用初始化器列表来设置否则为 const 的变量。它通常用于 const 变量、引用等。我实际上并不了解 COM,但如果智能指针具有与引用类似的机制(即一旦设置它就不能重新定位),那么它必须在构造时初始化,使用初始化列表。

Constructor() : _Ptr(new MyComObject)
{
 // Other constructor stuff here
}

语法可能是错误的——正如我所说,我不知道 COM——但这可能有帮助吗?

编辑:

假设您有以下课程:

class MyClass
{
public:
    MyClass(); // constructor
    MyComPtr _ptr;
};

然后在你的 .cpp 中,像这样定义你的构造函数:

MyClass::MyClass() : _ptr(__uuidof(MyComClass)
{
   // rest of constructor code
}
于 2013-05-15T15:41:03.437 回答