0

我有一個指向對象的指針列表。我想要做的是讀取列表並將每個對象存儲在該對象類型的動態數組中。所以我這樣做:使用動態數組賦值運算符

int size = List.size(); // find how many objects in the list 
ClassA* object = new ClassA[size]; // create a dynamic array 
int counter = 0; 
p = List.begin(); // iterator = begining of the list 
while(p != List.end()) 
{ 
    object[counter] = (*p)->operator=(*(*p)); 
       // called like this as this function is in a separate class 
    p++; 
    counter++; 
} 

這似乎是我想要的東西,這意味着我需要賦值運算符,但我有點困惑,要放什麼東西在它和我得到堆棧溢出錯誤,這裏是什麼我想我需要做的:

ClassA ClassA::operator =(const ClassA& source) 
{ 
    ClassA* newObject; 
    newObject = new ClassA; 
    newObject = source; 
    return newObject; 

} 

這是BS的負載我沒有這一點,但在我的頭上,這是我想做的事情,但我不完全瞭解我是如何實現它。

如果任何人都可以幫助或建議更好的方式來實現我所需要的東西,將不勝感激。

這樣做的原因是存儲在這個列表中的對象通常是遍歷每一幀並複製到一個臨時對象中。但是在程序運行過程中,列表並沒有被改變,這意味着我不需要在開始時複製每一幀。我需要一個動態數組,因爲我不知道有多少對象將被存儲在列表中。

+0

你的列表是否包含指針或實際對象? (即'列表'或'列表')? –

+0

對不起,應該做出更清晰的大衛布朗它包含一個指針列表 – RobBain85

回答

2

這可能是一個operator=實現:

ClassA &ClassA::operator =(const ClassA& source) { 
    // check for self-assignment 
    if(this != &source) { 
     // copy instance variables. 
     a = source.a; // for example... 
    } 
    // assignment always returns the lvalue 
    return *this; 
} 

我不知道你的ClassA的實例變量,所以你應該執行內部複製。

在另一方面,你的迭代列表時,您可以複製的對象是這樣的:

object[counter] = (**p); 

(**p)回報,首先存儲在迭代器的指針,然後解引用它。

+0

這意味着我將不得不復制每個變量的實例,可以說該類有30多個變量然後a = source.ab = source.b等在 – RobBain85

+0

是的,你將不得不復制每個變量。無論如何,有一個默認的賦值運算符就是這樣做的。你應該只實現這個操作符,如果你的類在內部處理資源,如指針,設備等。 – mfontanini

+0

工作的一種享受非常感謝你fontanini,你可以解釋一些更多關於內部處理資源,如果你不介意,我不太遵循? – RobBain85