cpp删除旧指针并重新初始化它

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)

我想知道这是否正确完成?基本上主要是删除指针并重新创建它.最好的方法是什么?

MSa*_*ers 5

只需使用std::unique_ptr<>:

session.reset(new TcpServerSession(io_service_));

它使一切正确:在新对象可用之前不要删除旧对象,永远不要让会话指向无效的对象,即使存在异常,也不会泄漏内存.