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