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