나는이 질문을 다시 쓰고 있는데, 나는 이것을 처음 질문 할 때 이해하지 못했고 그 질문은 정말로 난잡 해졌다.Singleton instanced two times
저는 싱글 톤 패턴 클래스 (Meyers Singleton)를 라이브러리에 가지고 있습니다. 내 Main-Application에서 getInstance()를 호출하고 해당 라이브러리의 .cpp 내에서 두 개의 다른 주소를 얻습니다. 내가 LibraryInterface 내에서 getInstance()를 호출 할 때 같은 주소를 사용한다. Headerfile에서의 getInstance를 호출 할 때
MAIN.CPP
#include <GameEngine.h>
#include <iostream>
main() {
GameEngine& engine = GameEngine::getInstance();
std::cout << &engine; // gives me address A
engine.doSomething();
}
지금 그것을 잘 작동합니다 :
내부 라이브러리 GameEngine.h
class GameEngine {
public:
static jglEngine& getInstance() // Singleton is accessed via getInstance()
{
static jglEngine instance; // lazy singleton, instantiated on first use
return instance;
}
void doSomething() {
GameEngine& engine = GameEngine::getInstance();
std::cout << &engine; // gives me also address A
}
private:
GameEngine() {};
GameEngine(GameEngine const&); // prevent copies
void operator=(GameEngine const&); // prevent assignments
}
을하지만 난 기능을 넣어하지 않는 경우 헤더 안쪽에 정의가 있지만 소스 파일 안에는 다른 주소가 있습니다 :
내부 라이브러리 GameEngine.cpp
#include "GameEngine.h"
void GameEngine::doSomething() {
GameEngine& engine = GameEngine::getInstance();
std::cout << &engine; // gives me address B
}
발견 솔루션 : D
나는 그것이 작동 만든 정적 라이브러리에 동적 라이브러리를 변경했습니다.
정적 멤버가 다른 스레드에서 초기화 된 경우 한 번에 문제가 발생할 수 있습니다 (대부분의 컴파일러 사용시). 이것이 아직도 사실인지 확실하지 않습니다. –
하지만 여기서 다른 스레드를 사용하지 않습니까? – joshflosh
코코아에 익숙하지 않기 때문에 잘 모르겠습니다. 그래도 시험 할만한 가치가있는 것. –