boost::shared_ptr
コンストラクターにカスタム削除メソッドを提供することに関して質問があります。ブーストのためのカスタムディレクターshared_ptr
たとえば、GameObjects
を作成/破棄するGameObjectFactory
クラスがあります。それはMemoryManager
のインスタンスを持ち、Allocate()/Deallocate()
のメモリを持つことができます。 CreateObject()
はMemoryManager
によって割り当てられたGameObject
を返し、boost::shared_ptr
にカプセル化されています。
boost::shared_ptr
が破壊すると、MemoryManager->Deallocate()
メソッドが呼び出されます。しかし、私はそれを正しく得ることはできません。私はこれらのエラーを取得:
error C2276: '&' : illegal operation on bound member function expression
error C2661: 'boost::shared_ptr<T>::shared_ptr' : no overloaded function takes 2 arguments
私はブーストドキュメントと私はstackoverflowのから得たヒットを読んだことが、まだ私はそれが権利を取得することはできません。私はなぜ以下のdosntの仕事を理解していない。
ここに私のコードです。
#ifndef _I_GAMEOBJECT_MANAGER_H
#define _I_GAMEOBJECT_MANAGER_H
#include "../../Thirdparty/boost_1_49_0/boost/smart_ptr/shared_ptr.hpp"
#include "EngineDefs.h"
#include "IMemoryManager.h"
#include "../Include/Core/GameObject/GameObject.h"
namespace Engine
{
class IGameObjectFactory
{
public:
virtual ~IGameObjectFactory() { }
virtual int32_t Init() = 0;
virtual bool Destroy() = 0;
virtual bool Start() = 0;
virtual bool Stop() = 0;
virtual bool isRunning() = 0;
virtual void Tick() = 0;
template <class T>
inline boost::shared_ptr<T> CreateObject()
{
boost::shared_ptr<T> ptr((T*) mMemoryMgr->Allocate(sizeof(T)),&mMemoryMgr->Deallocate);
return ptr;
}
template <class T>
inline boost::shared_ptr<T> CreateObject(bool UseMemoryPool)
{
boost::shared_ptr<T> ptr((T*) mMemoryMgr->Allocate(sizeof(T),UseMemoryPool), &mMemoryMgr->Deallocate);
return ptr;
}
protected:
IMemoryManager* mMemoryMgr;
};
}
#endif
を私はまだ取得次のエラーが発生しました:エラーC2661: 'boost :: shared_ptr :: shared_ptr':オーバーロードされた関数は2つの引数をとりません最新ブーストビルドを使用 –
KaiserJohaan
@KaiserJohaan:どのバージョンのBoostを使用していますか? –
私はブーストを使用しています1.49.0 – KaiserJohaan