我正在使用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;
}
答案 0 :(得分:0)
是否有理由在GetInstance中重新创建_Conn。那时构造函数已经创建了一次。因此,重新分配给_Conn可能会导致调用前一个实例的析构函数(并关闭)。