Распределитель пользовательских памяти с шаблоном

Я изучаю некоторые вещи об управлении памятью, поэтому я хотел реализовать свой собственный распределитель памяти.. Сначала я создал абстрактный класс с именем 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 файлы..

0 ответов

Другие вопросы по тегам