2

C++ で std::unique_ptr を deleter と共に使用すると問題が発生します。コードは次のようになります。

std::unique_ptr<SDL_Surface> srf( SDL_CreateWindow(...), SDL_DestroyWindow );

これは、コードがどのように見えるかです。以下は、VS Express がスローするエラーです。

Error   1   error C2664: 'std::unique_ptr<_Ty>::unique_ptr(SDL_Surface *,const std::default_delete<_Ty> &) throw()' : cannot convert parameter 2 from 'void (__cdecl *)(SDL_Window *)' to 'const std::default_delete<_Ty> &'

説明付きでこれを機能させる方法を投稿してください、ありがとう。

4

2 に答える 2

2

デリータのタイプは、unique_ptr のタイプの一部であり、テンプレート引数として指定する必要があります。

std::unique_ptr<SDL_Surface, decltype(SDL_DestroyWindow)*>
    srf(SDL_CreateWindow(...), SDL_DestroyWindow);

デフォルトではstd::default_deleteであり、へのポインタSDL_DestroyWindowはそれに変換できません。

于 2013-09-01T19:44:08.670 に答える