2012-11-20 26 views
0

,而這些是我發現了什麼:指定shared_ptr的一個定製刪除,但符合我尋覓的計算器,瞭解如何specifiy爲shared_ptr的一個定製刪除錯誤

boost::shared_ptr<T> ptr(new T, std::mem_fun_ref(&T::deleteMe)); 
boost::shared_ptr<S> ptr(new S, std::ptr_fun(lib_freeXYZ)); 

我有一個類ISprite,這是抽象的類使用純虛函數destroy(),這個類可以使用libInterface-> createSprite(a.bmp)創建實例,現在我使用ISprite作爲另一個類中的成員變量,希望使用shared_ptr來包裝它,但是ISprite實例不能刪除,如果我有一個ISprite * a,並嘗試在另一個類的destrcutor中刪除一個,系統會崩潰,但它可以使用a-> destroy()釋放內存,所以如果我想使用shared_ptr包裝成員變量ISprite,我需要指定我自己的刪除器 爲了它。以下是我做的:

boost::shared_ptr<ISprite> ptr(system- 
     >createSprite("a.bmp"),std::mem_fun_ref(&ISprite::destroy)); 

但編譯都跟我 ...提振\ smart_ptr \詳細\ shared_count.hpp(132):

error C2664: 'void std::mem_fun_ref_t<_Result,_Ty>::operator()(_Ty &) const' :   
cannot convert parameter 1 from 'ISprite *' to 'ISprite &' 

我不知道是什麼錯在那裏,任何人都可以幫忙?太感謝了!

回答

0

mem_fun_ref需要T &。改爲使用mem_fun;它預計T *

+0

!!! ,它的工作原理,我會嘗試看到所有的應用程序工作或不! –

+0

還有一個問題,我的ISprite變量是另一個類中的成員變量,所以我需要在構造函數中初始化它,然後如何初始化它?顯然我不能使用「ptr(system-> createSprite(」a.bmp「),std :: mem_fun(&ISprite :: destroy));」 –

相關問題