inheritance / virtual 뭔가.. 잘 모르겠어요..

manim의 이미지

static 으로 정의된 mInstanceOfTask 라는 map이 있을때요..

map Task::mInstanceOfTask;
void Task::setInstance()
{
mInstanceOfTask.insert(make_pair("echo", new EchoTaskCreator()));
}

Task* myTask = Task::mInstanceOfTask["echo"];

이렇게 썼을때 myTask 는 그러면 new EchoTaskCreator() 를 갖는거죠?

그런데 왜

myTask->setTaskName("echo"); 라든가
myTask->creator();

등을 수행하면 바로 segment fault가 나올까요?

class 선언은 아래 있어요.

----------------------------------------
class Task
{
public:
Task();
virtual ~Task();

static void setInstance();
static map mInstanceOfTask;
virtual void Task::execute(const std::string& inInstance);

virtual void setTaskName(const std::string& inName);
virtual Task* creator()=0;
virtual void task()=0;

private:
std::string mTaskName;
};

class EchoTaskCreator : public Task
{
public:
virtual void task(){}
virtual Task* creator(){return new EchoTask();}
};

class EchoTask : public Task
{
public:
virtual Task* creator(){return NULL;}
virtual void task() {cout<<"echo task called"< };

ssehoony의 이미지

근데 여기서 map 은 뭔가요?
위 소스대로는 stl 의 map 은 아닌 듯 한데요.

------------------------------------------------------------------
위의 map 을 stl의 map 에 뭔가 key 와 value 를 typedef 한
것이라고 가정한다면

Task::setInstance() 이 함수를 실행한 후
Task* myTask = Task::mInstanceOfTask["echo"]; 이렇게 하셨나요?

map::iterator it = Task::mInstanceOfTask.find("echo");
한 다음
일단 it != Task::mInstanceOfTask.end() 를 확인해 보세요.

manim의 이미지

늦었지만 감사합니다 ^^