Shr*_*han 0 c++ boost pointers
我有一个tcp服务器,它需要允许任何时候只有一个客户端连接到它.无论何时新客户端连接,都必须删除旧会话并创建新会话.
现在,我这样做:
void TcpServer::start_accept() {
Logger::info("[TCPSERVER] TCP Server starting to accept", __LINE__, __FILE__);
if (session) { // check if there is any older session, if so..delete them
session = NULL;
delete session;
}
session = new TcpServerSession(io_service_);
acceptor_.async_accept(session->socket(), boost::bind(&TcpServer::handle_accept, this, session, boost::asio::placeholders::error));
}
Run Code Online (Sandbox Code Playgroud)
所以任何时候我想发送一个消息到客户端,它是这样做的:
int TcpServer::sendMsgToClient(std::string msg) {
if (session)
session->sendMsgToClient(msg);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否正确完成?基本上主要是删除指针并重新创建它.最好的方法是什么?
只需使用std::unique_ptr<>:
session.reset(new TcpServerSession(io_service_));
它使一切正确:在新对象可用之前不要删除旧对象,永远不要让会话指向无效的对象,即使存在异常,也不会泄漏内存.