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 를 매개변수로 받는게 좋다고 생각됩니다.
댓글 달기