qpid 메시징 라이브러리로 작업하고 있습니다. 연결 개체를 보유하는 싱글 톤 클래스가 있습니다. 연결이 어떻게 생성되었는지에 따라 응용 프로그램이 종료 될 때 핵심이되는 것으로 나타났습니다. 싱글 톤 생성자 또는 정적 메서드로 만들었다면 모든 것이 좋았습니다. 그러나 비 정적 메서드 나 getinstance 메서드에서 아래 표시된 것처럼 메시징 라이브러리를 만들면 내 소멸자가 호출되기 전에 내부적으로 close 메서드가 호출됩니다. 그것은 중단을 호출합니다. 나는 이러한 창조 호출이 다른 결과를 가져올 수있는 것과 다른 것에 대해 궁금해하고있었습니다.생성자와 메소드의 싱글 톤 함수 호출
class Singleton : public boost::noncopyable
{
public:
static Singleton &
GetInstance()
{
static Singleton tS;
// If I create _Conn this way it cores
// tS._Conn = SharedConn(new Conn());
return tS;
}
private:
typedef boost::shared_ptr<Conn> SharedConn;
Singleton()
{
// If I create _Conn this way it works
//_Conn = SharedConn(new Conn());
}
SharedConn _Conn;
};
int main(int argc, char** argv)
{
Singleton::GetInstance();
return 0;
}
안녕하세요, GetInstance()가 두 번 연속 호출되면 어떻게됩니까? 그것은 첫 번째 경우 (작동하는 경우), 모든게 괜찮아 보인다. tS.Conn은 생성자가 다시 호출되지 않기 때문에 두 번 호출되지 않는다. 그러나 두 번째 경우 (코어 경우) getInstance()에 대한 두 번째 호출에서 tS._Conn이 다시 할당되고 이전 연결이 손실됩니다 ... 잘못된 경우 수정하십시오. – GL770
한 번만 _Conn을 인스턴스화합니다. 생성자에서 인스턴스화하면 작동합니다. getinstnace에서 인스턴스화하면 코어라고 부릅니다. – sfpiano