shared_ptrのカスタム削除機能を指定する方法をstackoverflowで検索しましたが、次のようになりました。
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) );
純粋仮想関数destroy()を持つ抽象クラスであるクラスISpriteがあります。このクラスは、libInterface-> createSprite(a.bmp)を使用してインスタンスを作成できます。次に、ISpriteを別のクラスのメンバー変数として使用します。 shared_ptrを使用してラップしますが、ISpriteインスタンスを削除できません。ISprite* aがあり、別のクラスのデストラクタでaを削除しようとすると、システムがクラッシュしますが、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 &'
私はそこで何が悪いのか分かりません、誰かが助けることができますか?どうもありがとう!