2011-12-30 50 views
0

我希望GetStudent()函數返回Student的唯一實例。正如我所料,該函數返回Student Class的唯一實例。我仔細檢查了GetStudent()函數返回的內存地址。但是很奇怪的是,每當我調用GetSutent()函數時,都會調用Student的構造函數。代碼如下所示。編程環境是VC6.0 & MFC項目。C++ -using文件範圍靜態函數

//someApp.h 
    Student& GetStudent(); 


    //someApp.cpp 
    Student& GetStudent() 
    { 
     static Student _student; 
     return _student; 
    } 


    //client1Class.cpp 
    #include "someApp.h" 
    void CCliend1Class::DoSomething() 
    { 
     GetStudent().DoSomething(); 
    } 



    //client2Class.cpp 
    #include "someApp.h" 
    void CClient2Class::DoSomething() 
    { 
     GetStudent().DoSomething(); 
    } 
+0

你確定你沒有在'DoSomething()'的某處創建另一個'Student'嗎? – lapk 2011-12-30 00:39:10

+0

添加代碼如何檢查指向返回的Student對象的指針,我懷疑某些臨時對象導致構造函數被多次調用。 – marcinj 2011-12-30 00:40:41

+0

luskan // int adrr =&GetSudent() – webnoon 2011-12-30 00:50:12

回答

1

在GetStudent()對象只應建立在第一次調用函數時(假設有不同的線程調用該函數之間不存在競爭,我不知道在螺紋的情況下會發生什麼,但這不是問題)。應用程序中確實應該只有一個從此函數返回的對象。

順便說一句,這不是關於「文件範圍靜態函數」,而是關於「函數範圍靜態變量」。

+0

你可以編輯我的問題:)謝謝。 – webnoon 2011-12-30 00:48:06

+0

我不知道如何在多線程環境中起作用GetStudent()在不同的線程之間被調用。 – webnoon 2011-12-30 00:55:38