我在 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 &'
我不知道那里出了什么问题,有人可以帮忙吗?太感谢了!