1

最近、すべてのrawポインターをc ++ 11スマートポインターに置き換えるプロセスを実行しましたが、DirectXの長いポインターを除いてようやく完了しました。

以下の実装に沿って何かを取得したいと思います。

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

VisualStudioから次のエラーが発生します。

エラー:適切なoperator()またはポインタから関数型への変換関数のないクラス型のオブジェクトの呼び出し

CComPtrよりもstd::unique_ptrまたはstd::shared_ptrを使用したいと思います。なぜこれが起こっているのか、そして可能な実装方法について何か考えはありますか?

4

1 に答える 1

2

shared_ptr で operator() を呼び出しているようです。これは、shared_ptr を作成する方法ではありません。リセットを使用するか、変数を宣言するのと同じ行でポインターを構築してみてください。

呼び出す作成関数によって、参照カウントが 1 のポインターが提供されることに注意してください。

于 2012-12-24T04:48:17.480 に答える