单例函数调用构造函数与方法

时间:2012-07-11 19:11:51

标签: c++ qpid

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

1 个答案:

答案 0 :(得分:0)

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