我正在使用 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;
}