2012-10-14 50 views
0

我有一個類負責創建和初始化一些大對象,因爲對象都是相同的類型,我不想爲所有的對象重複相同的初始化代碼的對象,我調用初始化方法爲每個對象,例如:使用C++中的類指針保持作用域

InitObject(objMember); 

void Test::InitObject(LargeObject * obj) 
{ 
    obj = new LargeObject; 
    obj->Load(); 
    obj->SetSomeProperty(false); 
} 

一旦這項工作已經完成,從一個公共方法我稱之爲一套方法來獲得一個指向每個對象:

//public 
LargeObject * Test::GetObject() 
{ 
    return objMember; 
} 

問題是當調用InitObject時,對象正在丟失範圍,對象被正確構造和填充,但是當我調用GetObject時,它已經失去了一切。

我可能錯過了一些微不足道的東西,但我不明白爲什麼它會超出範圍。

+1

需要查看更多代碼... – Goz

回答

2

這是微不足道的,是的。您正在初始化原始指針的副本。你可能想通過引用傳遞它:

void Test::InitObject(LargeObject*& obj) 

按值傳遞意味着你要指定的new指針副本的回報。功能InitObject之外的一個保持不變。

還有一些事情 - 在施工後初始化對象時應小心謹慎。如果施工後對象無效,這是一個糟糕的設計(不包括一些罕見的情況)。您可以通過從構造函數中拋出異常來表示無效的初始化。

此外,請考慮使用智能指針而不是原始指針。

+0

哇,謝謝!我還是新來的C++,我曾想過使用*我通過引用傳遞它。 – Neophyte

+0

謝謝,我在構造函數中拋出異常,並會看看智能指針。 – Neophyte