Я искал в 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 не может быть удален, если у меня есть ISprite * a, и попытайтесь удалить a в destrcutor другого класса, система потерпит крах, но она может использовать a-> 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 &'
Понятия не имею, что там не так, кто-нибудь может помочь? бесконечно благодарен!
mem_fun_ref
ожидает T &
, использование mem_fun
вместо; это ожидает T *
,
Других решений пока нет …