inheritance / virtual 뭔가.. 잘 모르겠어요..
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"<
};
근데 여기서 map 은
근데 여기서 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() 를 확인해 보세요.
헤
늦었지만 감사합니다 ^^
댓글 달기