CComPtr和RAII

时间:2013-08-19 12:38:44

标签: c++ com raii

我正在使用CComPtr来保存指向com对象的指针。

我还用一个类包装了资源:

class ResourceWrapper {
public:
    ResourceWrapper()
    {

        CoInitializeEx(NULL, COINIT_MULTITHREADED);
        HRESULT hr = S_OK;
        if (FAILED( hr = CoCreateInstance(CLSID_Resource, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pResource)))||pResource==NULL)
        {

            throw std::runtime_error("failed to create instance");


        }

    }
    ~ResourceWrapper()
    {
        pResource =NULL;
        CoUninitialize();
    }
    CComPtr<IResource> Get()
    {
        return pResource;
    }
private:
    CComPtr<IResource> pResource;
    ResourceWrapper(const ResourceWrapper&);
    ResourceWrapper operator=(const ResourceWrapper&);


};

但后来我认为可能CComPtr正在实施RAII,然后我创建的Wrapper是不必要的。

我试图谷歌,但我不明白我是否需要包装。

所以我的问题是,如果我使用CComPtr,我是否还需要创建一个包装器?

1 个答案:

答案 0 :(得分:2)

不,你不需要你的包装器,而且初始化和未初始化COM就像这是一个非常糟糕的主意。在应用程序启动和关闭时执行一次。