У меня возник вопрос о предоставлении настраиваемого метода удаления для конструктора boost::shared_ptr
.Пользовательский удалятель для boost shared_ptr
Например, у меня есть класс GameObjectFactory
, который создает/уничтожает GameObjects
. Он имеет экземпляр MemoryManager
, который может содержать Allocate()/Deallocate()
. CreateObject()
возвращает GameObject
, выделенный через MemoryManager
, инкапсулированный в 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 аргумента Использование последней сборки boost – KaiserJohaan
@KaiserJohaan: Ну, какую версию Boost вы используете? –
Я использую boost 1.49.0 – KaiserJohaan