将COM智能指针定义为头文件中的成员?

时间:2013-05-15 15:00:31

标签: c++ com header-files smart-pointers class-members

我想知道如何在头文件中将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));
    

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

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

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

1 个答案:

答案 0 :(得分: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
}