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の負荷です。

誰かが私が必要とするものを達成するためのよりよい方法を助けたり、提案したりすることができれば幸いです。

この理由は、このリストに格納されているオブジェクトは通常、各フレームを通して反復され、一時オブジェクトにコピーされるからです。しかし、プログラムの実行中にリストは変更されません。つまり、最初に1回だけ各フレームをコピーする必要はありません。また、リストに格納されるオブジェクトの数がわからないため、動的配列が必要です。

+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 on – RobBain85

+0

はい、各変数をコピーする必要があります。とにかく、それを正確に行うデフォルトの代入演算子があります。あなたのクラスがポインタやデバイスなどの内部的にリソースを扱う場合にのみ、この演算子を実装してください。 – mfontanini

+0

大変ありがとうございました。あなたが気にしない限り内部的にリソースを扱うことについてもう少し詳しく説明できますか?私はかなりフォローしていない? – RobBain85

関連する問題