gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:38 25 4
gpt4 key购买 nike

我有一个 tcp 服务器,它需要在任何时候只允许一个客户端连接到它。每当新客户端连接时,必须删除旧 session 并创建新 session 。

现在,我是这样做的:

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));
}

所以任何时候我想向客户发送消息,都是这样完成的:

int TcpServer::sendMsgToClient(std::string msg) {

if (session)
session->sendMsgToClient(msg);
}

我想知道这样做是否正确?基本上要点是删除指针并重新创建它。最好的方法是什么?

最佳答案

只需使用 std::unique_ptr<> :

session.reset(new TcpServerSession(io_service_));

它做对了一切:在新对象可用之前不要删除旧对象,永远不要让 session 指向无效的东西,即使出现异常也不会泄漏内存。

关于c++ - cpp删除旧指针并重新初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19290015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com