我想實現一個多態隊列。 這裏是我的審判:多態隊列
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