указать пользовательское удаление для 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-> 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 &'

Понятия не имею, что там не так, кто-нибудь может помочь? бесконечно благодарен!

0

Решение

mem_fun_ref ожидает T &, использование mem_fun вместо; это ожидает T *,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector