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 回だけです。また、リストに格納されるオブジェクトの数がわからないため、動的配列が必要です。

4

1 に答える 1

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)最初に反復子に格納されているポインターを返し、次にそれを逆参照します。

于 2012-04-29T16:51:49.240 に答える