我正在使用qpid消息库。我有一个持有连接对象的单例类。我注意到我的应用程序将核心退出取决于我如何创建连接。如果我在单例构造函数或静态方法中创建它,一切都很好,但是如果我使用非静态方法创建它,或者在我的getinstance方法中创建它,则消息库在调用析构函数之前会在内部调用close方法它会调用一个中止。我想知道这些创作电话是不同的,可能会导致这样的结果。构造函数中的单例函数调用vs方法
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 2012-07-11 19:49:49
我只实例化_Conn一次。如果我在构造函数中实例化它的作品。如果我在getinstnace中实例化它的核心。 – sfpiano 2012-07-11 20:02:24