我想解決如何使用std :: shared_ptr與自定義刪除。具體來說,我使用它作爲SDL_Surface:使用定製刪除與std :: shared_ptr
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文檔的gd std :: shared_ptr實現,但是不能理解它。我究竟做錯了什麼?
編輯:我已經縮小了這個問題,但會留下上面的原始問題。我曾是一個遊戲類,如果我剝它歸結爲一個基本的實現,是這樣的:
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
類中是什麼?
你的例子對我來說編譯得很好。 –