【问题标题】:specify a custom deleter for shared_ptr but meets error为 shared_ptr 指定自定义删除器但遇到错误
【发布时间】: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


    【解决方案1】:

    mem_fun_ref 需要 T &amp;。请改用mem_fun;它需要T *

    【讨论】:

    • 还有一个问题,我的ISprite变量是另一个类的成员变量,所以我需要在构造函数中初始化它,那我该如何初始化呢?显然我不能使用 "ptr(system->createSprite("a.bmp"),std::mem_fun(&ISprite::destroy));"
    猜你喜欢
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多