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