【发布时间】:2012-11-20 21:54:10
【问题描述】:
我在 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 &'
我不知道那里出了什么问题,有人可以帮忙吗?谢谢一百万!
【问题讨论】:
标签: c++ algorithm boost std shared-ptr