c++ static 관련 ..
글쓴이: hongwoo / 작성시간: 월, 2007/01/15 - 6:07오후
다음과 같은 코드가 있습니다.
Manager객체는 Clerk객체를 가지고 있습니다. (composition)
Manager객체를 싱글턴으로 구현합니다. Manager::instance()
Clerk의 생성자에서 Manager::instance()를 사용합니다.
#include <stdio.h> class Clerk { public: Clerk(); int num; }; class Manager { public: Manager(int id=8989); static Manager* instance(); int num; Clerk clerk; }; Manager::Manager(int id) { num = id; } Manager* Manager::instance() { printf("instance\n"); static Manager man; return &man; } Clerk::Clerk() { num = Manager::instance()->num; } int main(int argc, char* argv[]) { Manager* pMan = Manager::instance(); printf("Hello World!\n"); return 0; }
visual c++에서는 의도한대로 동작하는데..,
cygwin gcc에서 instance가 recursive하게 호출됩니다.
왜 이럴까요 ??
Manager의 생성이 완료된 다음에
다른 멤쏘드에서 num = Manager::instance()->num; 를 하면 되겠지만,
굳이 생성자에서 num = Manager::instance()->num; 를 하고 싶다면, 어떤 방법이 좋을까요 ???
Forums:
Manager 가 Clerk 를
Manager 가 Clerk 를 가지고 있고, Clerk 는 생성자에서 Manager 가 이미 생성
되어 있다고 가정하고 있습니다. Manager 가 생성될 때 가지고 있는 모든 멤버
변수가 생성 된 후에 생성됩니다. Manager 가 생성되려면 Clerk 가 생성되어야
하는데, Clerk 는 Manager 가 생성되어있길 바랍니다.
논리적으로 보면 recursive 가 맞습니다.
Clerk 의 생성자에서 num 를 매개변수로 받는게 좋다고 생각됩니다.
댓글 달기