我想实现一个多态队列。 这里是我的审判:多态队列
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();
}
}
不幸的是,我无法管理,使工作多态性队列与此代码,因为我在第二comment.I猜测提到的原因,我需要使用智能指针,但如何? 我愿意对我的代码或多态队列的新实现进行任何改进。
谢谢。
这在许多方面都是错误的,我甚至不知道从哪里开始。对于初学者:你为什么首先将输入从UTF-8转换回UTF-8?为什么不'decodeFromTcpMessage()'一个自由函数接受一个字符串并返回一个动态分配的请求?你把一个_local自动对象的地址排入队列。 (Ouch!)你总是试图检索一个'LoginRequest',尽管你也将其他人放入队列中。您可以访问'dynamic_cast'的结果而不检查转换是否成功。 (为什么你要继续演出?虚拟功能有什么问题?)... – sbi 2010-04-08 12:28:51
...我用完了空间,因为评论只允许600个字符。我建议你给自己一本体面的C++书。例如,看到这里:http://stackoverflow.com/questions/388242/。 – sbi 2010-04-08 12:32:31