0

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

1 回答 1

0

在 GetInstance 中重新创建 _Conn 是否有原因?那时构造函数已经创建了一次。因此,重新分配给 _Conn 可能会导致调用前一个实例的析构函数(并关闭)。

于 2012-07-11T19:27:13.613 回答