Я пытаюсь реализовать шаблон фабрики, регистрируя указатели функций производного класса на фабрику на статической карте (член фабрики) и создавая объекты, просматривая карту. Но при этом я получаю ошибку сегментации.
Фрагмент кода:
factory.cpp
typedef Shape* (*Funcptr)();
std::map<int,Funcptr> Factory::funcmap;
int Factory::registerCreator(int ShapeID, Shape *(*CFuncptr)()) {
Factory::funcmap[ShapeID] = CFuncptr;
return 1;
}
Shape* Factory::CreateObject(int ShapeID) {
std::map<int,Funcptr>::iterator iter;
iter = funcmap.find(ShapeID);
if(iter != funcmap.end()){
return iter->second();
}
return NULL;
}
factory.h
class Factory {
public:
Factory();
virtual ~Factory();
static int registerCreator(int, Shape *(*CFuncptr)());
Shape* CreateObject(int);
private:
static std::map<int,Funcptr> funcmap;
};
Square.cpp
static Shape *SquareCreator() {
return new Square;
}
static int SquareAutoRegHook = Factory::registerCreator(1,SquareCreator);
При создании объекта Factory в основном файле возникает ошибка сегментации. Подскажите, пожалуйста, если я что-то делаю не так. Я использую CppUTest для TDD и не знаю, как это отладить.