ポリモーフィックキューを実装しようとしています。これが私の裁判です:
QQueue <Request *> requests;
while(...)
{
QString line = QString::fromUtf8(client->readLine()).trimmed();
if(...)){
Request *request=new Request();
request->tcpMessage=line.toUtf8();
request->decodeFromTcpMessage(); //this initialize variables in request using tcpMessage
if(request->requestType==REQUEST_LOGIN){
LoginRequest loginRequest;
request=&loginRequest;
request->tcpMessage=line.toUtf8();
request->decodeFromTcpMessage();
requests.enqueue(request);
}
//Here pointers in "requests" do not point to objects I created above, and I noticed that their destructors are also called.
LoginRequest *loginRequest2=dynamic_cast<LoginRequest *>(requests.dequeue());
loginRequest2->decodeFromTcpMessage();
}
}
残念ながら、2番目のコメントで述べた理由により、このコードでPolymorphic Queueを機能させることができませんでした。おそらく、スマートポインターを使用する必要がありますが、どうすればよいでしょうか。私は自分のコードの改善やポリモーフィックキューの新しい実装を受け入れています。
ありがとう。