为shared_ptr指定自定义删除器但遇到错误

时间:2012-11-20 21:54:10

标签: c++ algorithm boost std shared-ptr

我在stackoverflow中搜索了如何为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-&gt; createSprite(a.bmp)创建实例,现在我使用ISprite作为另一个类的成员变量,想使用shared_ptr来包装它,但是ISprite实例不能被删除,如果我有一个ISprite * a,并尝试在另一个类的destrcutor中删除a,系统会崩溃,但它可以使用a-&gt; destroy( )释放内存,所以如果我想使用shared_ptr来包装成员变量ISprite,我需要为它指定我自己的删除器。以下是我的工作:

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

但编译继续告诉我 ... boost \ smart_ptr \ detail \ 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 &'

我不知道那里有什么问题,有人可以帮忙吗?万分感谢!

1 个答案:

答案 0 :(得分:0)

mem_fun_ref需要T &。请改用mem_fun;它需要T *