Использование пользовательского удалителя с std :: shared_ptr
Я пытаюсь понять, как использовать std :: shared_ptr с пользовательским средством удаления. В частности, я использую его с SDL_Surface как:
std::shared_ptr<SDL_Surface>(SDL_LoadBMP(....),SDL_FreeSurface);
который компилируется и работает нормально. Тем не менее, я хотел бы попробовать свой собственный средство удаления и не могу понять, как это сделать. Документация для SDL_FreeSurface находится здесь:
http://sdl.beuc.net/sdl.wiki/SDL_FreeSurface
в котором я нахожу SDL_FreeSurface объявлен как:
void SDL_FreeSurface(SDL_Surface* surface);
В качестве теста и, следуя этой информации, я попробовал следующую функцию:
void DeleteSurface(SDL_Surface* surface)
{
std::cout << "Deleting surface\n";
SDL_FreeSurface(surface);
}
Тем не менее, компиляция с g ++ дает мне следующую ошибку:
error: no matching function for call to 'std::shared_ptr<SDL_Surface>::shared_ptr(SDL_Surface*, <unresolved overloaded function type>)'
Я посмотрел на документацию по gnu для реализации gcc std :: shared_ptr, но не могу понять этого. Что я делаю неправильно?
РЕДАКТИРОВАТЬ: Я с тех пор сузил проблему, но оставлю первоначальный вопрос выше. У меня был класс Game, который, если я ограничу его до базовой реализации, представлял собой что-то вроде:
class Game {
public:
/* various functions */
private:
void DeleteSurface(SDL_Surface* surface);
bool CacheImages();
std::vector<std::shared_ptr<SDL_Surface> > mCachedImages;
/* various member variables and other functions */
}
с реализациейDeleteSurface
как указано выше, и реализацияCacheImages()
как:
bool CacheImages()
{
mCachedImages.push_back(std::shared_ptr<SDL_Surface>(SDL_LoadBMP(...),DeleteSurface);
return true;
}
в какой игре мне ошибка я перечислил выше. Тем не менее, если я переместитьDeleteSurface()
функционировать внеGame
Класс, не изменяя его, код компилируется. О чем это в том числеDeleteSurface
функция вGame
класс, который вызывает проблемы?