0

我在 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->createSprite(a.bmp)创建实例,现在我使用ISprite作为另一个类的成员变量,想使用shared_ptr封装,但是ISprite实例不能删除,所以如果我想使用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 &'

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

4

1 回答 1

0

mem_fun_ref期望一个T &. 改为使用mem_fun;它期望一个T *.

于 2012-11-20T21:59:01.510 回答