2012-05-02 26 views
2

請解釋與實例創建與實例創建在C++內存分配

class simpleTestFactory 
{ 
    public: 
    static simpleTest* Create() 
    { 
     return new simpleTest(); 
    } 
} 

class simpleTest 
{ 
    private: 
    int x,y,z; 
    public: 
    int printTest() 
    { 
     cout<<"\n This test program"; 
    } 
} 

int main() 
{ 

    simpleTest* s1=simpleTestFactory::Create(); 
    . 
    . 
    s1=simpleTestFactory::Create(); 
} 

內存分配在我們的SimpleTest的創建實例與創建靜態功能的主要功能。我們再次爲同一個對象創建另一個實例。

在這種情況下,第一個創建的實例內存將被刪除?

否則如何避免內存問題?

+0

使用智能指針,如'shared_ptr'或'unique_ptr' – Nick

+0

我需要爲整個項目創建單個實例,我如何使用爲多個對象創建的實例引用。 – gks

回答

2

在這種情況下,第一個創建的實例內存將被刪除?

不,它不會。您必須先撥打delete或通過首先使用智能指針來釋放它。

(我假設s1simpleTest*類型,即指針simpleTest的,否則你的代碼是無效的C++。)

2

所有程序首先將不會編譯爲您傳遞指針對象。它應該是:

simpleTest *s1 = simpleTestFactory::Create(); 
      ^^^ 

內存管理必須在C++中手動完成。

delete s1; // do it before new allocation to s1. 

另外請記住,在C++創建一個對象與new是不是強制性的。它可以是簡單:

simpleTest obj; // automatic object, no explicit deallocation 

[對於垃圾自動收集你也可以使用smart pointers

2

嘗試singleton類型模式。只有在實例尚未創建的情況下才能創建實例。不確定你的用例。

+0

謝謝,我想爲整個項目創建單個實例 – gks

0

單例模式還假定對象實例將被刪除。因此你需要實現特殊的方法。

考慮到Thangaraj的問題,別忘了';'課後定義。是的,您必須通過刪除調用明確刪除對象。爲了避免這種情況,你可以使用智能指針。