1

我最近一直在经历用 c++11 智能指针替换所有原始指针的过程,现在我终于完成了,但我的 DirectX 长指针除外。

我想实现以下内容:

std::shared_ptr<IDirect3D9> p_d3d;
p_d3d( Direct3DCreate9(D3D_SDK_VERSION), [](IDirect3D9 *p) {//smart pointer initialization(1)
        p->Release();
});

我从 Visual Studio 收到以下错误:

错误:在没有适当的 operator() 或将函数转换为指针函数类型的情况下调用类类型的对象

我更喜欢使用 std::unique_ptr 或 std::shared_ptr 而不是 CComPtr。关于为什么会发生这种情况以及可能的实施方法的任何想法?

4

1 回答 1

2

您似乎在 shared_ptr 上调用 operator()。这不是您构造 shared_ptr 的方式。尝试使用重置,或在声明变量的同一行构造指针。

请注意,您调用的创建函数会为您提供一个引用计数为 1 的指针。

于 2012-12-24T04:48:17.480 回答