0

オブジェクトのキューを作成し、後で変更しようとしています。キューを作成すると、キューでそれらを変更して削除した後にコピーが作成されるだけなので、それらは消えます。したがって、これを回避するには、オブジェクトへのポインターのキューが必要です (または理解しています)。

私のクラス:

class process { 
    int waittime;
    queue<int> cpuburst, iotime;
   }

次に、次のようにキューを作成します。

process *P1;
process *P2;

P1 = new process(//info to fill my P1 with data);
P2 = new process(//info to fill my P2 with data);

queue<process *> readyque;
queue<process *> onCPU;

readyque.push(P1);
readyque.push(P2);

それは正常にコンパイルされますが、.front() または .push() を使用してキューに対して何かを実行しようとすると、エラーが発生し、「onCPU」C2228: left of '.cpuburst' must have class/struct/union のエラーが発生しますIntelliSense: expression must have class type

この行で:

x = onCPU.front().cpuburst.front() + y;

私は x を、クラスのキューの一番上にあるものと等しくなるようにしようとしています。これは、onCPU キューの一番上にもあります。

4

1 に答える 1

3

onCPUポインタが含まれているのでfront()、そうするとポインタが出てきます。ポインタを介してオブジェクトのメンバーにアクセスするには、次を使用します->

x = onCPU.front()->cpuburst.front() + y;

ポインタを持っていることが良い考えであるかどうかわからないのでqueue、これを自問してください:processオブジェクトはそれらの唯一の所有権を持つの一部である必要がありますか?queueそれとも、queue単に他の場所で作成されたオブジェクトを参照する必要がありますか?

オブジェクトを動的に割り当てることを避けることができれば、それは常に良いことです。おそらく、astd::queue<std::reference_wrapper<process>>が役立つでしょう。

それらを動的に割り当て続けたい場合は、スマートポインター(std::unique_ptrまたはなどstd::shared_ptr)を検討してください。

動的に割り当てられたオブジェクトへの生のポインタを使用する場合は、それらを忘れないでdeleteください。

于 2013-03-08T22:31:55.047 に答える