Использование пользовательского удалителя с 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 класс, который вызывает проблемы?

Ответы на вопрос(2)

Ваш ответ на вопрос