void ServerManager::addWork(SocketClient *clientSocket, vector<char> data){
Work *work = new Work(clientSocket, data);
m_workHandler->addWork(work);
}
這裏我創建了Work實例並將工作交給WorkHandler。我應該在哪裏釋放物體?
m_workHandler->addWork(work);
此代碼將工作插入到隊列中。
這是我的服務器的一個組成部分,如果我在很長一段時間這個代碼,然後錯誤的服務器崩潰說這樣
what() std::bad_alloc
我在網上看了看,它是顯示有ISN的錯誤消息」 t可用內存空間。所以我意識到在完成使用後我沒有釋放工作對象。
所以我想知道在哪裏我應該釋放工作對象。
void ServerManager::addWork(SocketClient *clientSocket, vector<char> data){
Work *work = new Work(clientSocket, data);
m_workHandler->addWork(work);
delete work;
}
我可以這樣做嗎?如果我通過工作實例,那麼它會增加引用計數?
void WorkHandler::workLoop(){
printf("WorkHandler::workLoop, called\n");
while(m_workHandlerRun){
Work *work = getWork();
char *pdata = work->getVPointer();
unsigned char type = pdata[0];
printf("WorkHandler::workLoop, type %d\n", type);
Packet *packet = m_packetFactory->createInstance(static_cast<PACKET_TYPES>(type));
packet->fromByte(pdata);
delete work;
}
}
這是我處理工作的代碼....我應該在這裏還是兩個地方刪除工作實例?在此先感謝...
在析構函數中。 – Mankarse