2014-03-31 62 views
0

我想用一個類中的指針填充列表,並在另一個類中使用它,但我總是採取相同的結果。我知道我必須每次創建一個新對象,但似乎並不奏效。任何幫助表示感謝,提前謝謝。下面是代碼:用指針填充列表 - C++

list<Class1*> FillList() { //Class1 is a superclass 

for (int i = 0; i < 2; ++i) { 
    //mvar is a Class1 object pointer 
    mvar = new Class1; 
    mvar = next(); //returns &Class2 (subclass) object witch has "ID" (int) and 
        //"Terms" (string) as parameters 

    if (mvar->ID() != -1) { 
     mlist.push_back(mvar); 
     mvar = NULL; 
    }  
} 
return mlist; 
mlist.clear(); 
} 


//Use of FillList in the other class 

list<Class1*> mlist2 = object->FillList(); //returns mlist 

while (mlist2.front()->id() != -1) { 

     index(mlist2.front()); //do something with it - Expects Class1 pointer 
     ... 
     mlist2 = object->FillList(); 
} 

*我試着使用:的

mlist.push_back(new Class1(mvar->ID()); 

代替:

mlist.push_back(mvar);. 

和它的作品,但是當程序到達指數()函數期望一個Class1對象指針而不是int(它是ID()的類型)

+2

'return mlist; mlist.clear();' - 你是否知道'mlist.clear();'永遠不會被執行? – marcinj

+0

這裏有一些奇怪的事情發生。你將'mvar'設置爲一個新分配的對象,但是立即用'next()'的結果替換它 - 這是內存泄漏。連續更改'mlist2'而不釋放包含的指針也是可疑的。 –

+1

你的問題並沒有真正讓我明白。你可以創建一些可編譯的例子,並試圖用換句話來說明你想實現的目標嗎? – rerx

回答

1

此代碼

mvar = new Class1; 
mvar = next(); 

覆蓋唯一的指針,你必須對全新的Class1對象進行泄漏。你只需要創建你想保留的對象。您不能逐步創建對象,並且沒有垃圾回收來修復這樣的錯誤。

+0

你說得對。如果我只保留mvar = next()並更改mlist.push_back(mvar);與mlist.push_back(新的Class1(mvar));這將是我想要做的事情,然後再次發生問題,因爲新的Class1()只需要一個int,但也有「Terms」參數。在需要Class1對象指針的index()處也存在同樣的問題 – MarcusV