Распределитель пользовательских памяти с шаблоном
Я изучаю некоторые вещи об управлении памятью, поэтому я хотел реализовать свой собственный распределитель памяти.. Сначала я создал абстрактный класс с именем SMemoryAllocator только с одним производным классом с именем StackBasedAllocator..
Моя проблема в том, что мой терминал лог:
Undefined symbols for architecture x86_64:
"StackBasedMemory<float>::StackBasedMemory(unsigned long)", referenced from:
_main in main.cpp.o
"StackBasedMemory<float>::~StackBasedMemory()", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
и вот мой абстрактный класс SMemoryAllocator:
emplate<class Object>
class SMemoryAllocator
{
public:
SMemoryAllocator(std::size_t size);
virtual ~SMemoryAllocator();
Object* create(std::size_t sizeOfBlock,std::size_t size);
void free();
virtual void add(Object*) = 0;
virtual void remove() = 0;
protected:
Object* _ptrOfmemory;
size_t _sizeOfblock;
};
и вот мой производный класс StackBasedAllocator:
#include "SMemoryAllocator.h"
template<class Object>
class StackBasedMemory : public SMemoryAllocator<Object>
{
public:
StackBasedMemory(std::size_t sizeOfBlock = 64);
~StackBasedMemory();
virtual void add(Object* obj);
virtual void remove();
private:
Object* _currentMarker;
unsigned int _iterOfblock;
};
и моя основная функция:
#include "FileLogger.h"
#include "StackBasedMemory.h"
int main(int argc,char** argv)
{
std::cout << "hello S2Engine" << std::endl;
//SLogger::setLog(new FileLogger());
StackBasedMemory<float> test;
//SLogger::kill();
return 0;
}
Я знаю, что некоторые люди скажут мне использовать распределитель std, но я просто хотел узнать, как сделать мой собственный.. спасибо, дайте мне знать, если вы хотите увидеть мои.cpp файлы..