boost::ptr_map

5 篇文章 0 订阅

写tracker服务器的时候:

typedef boost::ptr_map<SOCKET, Cconnection> t_mapconnections;


/** 用map存储tcp连接
*/
t_mapconnections m_mapconnection;


std::auto_ptr<Cconnection> connection(new Cconnection(m_pServer, pBuffer->sClient, *((sockaddr_in*)pRemoteAddr) , this));
if (connection->s() != INVALID_SOCKET)
{
connection->SetIocpContent(pClient);


if (strstr(pBuffer->buff, "\r\n\r\n"))
{
connection->OnRecv(pBuffer->buff, dwTrans);
iSend = TRUE;
}
//iSend = FALSE;
::EnterCriticalSection(&g_cs);
m_mapconnection[pBuffer->sClient] = connection.release();
::LeaveCriticalSection(&g_cs);

}

m_mapconnection[pBuffer->sClient] = connection.release();    m_mapconnection[pBuffer->sClient]  返回的是引用,不能直接给引用复制(就是不能用别的值赋给引用)。智能改变引用所指向的值的内容


所以得修改成以下内容

typedef boost::unordered_map<SOCKET, boost::shared_ptr<Cconnection> > t_mapconnections;

/** 用map存储tcp连接
*/
t_mapconnections m_mapconnection;


boost::shared_ptr<Cconnection> connection(new Cconnection(m_pServer, pBuffer->sClient, *((sockaddr_in*)pRemoteAddr) , this));
if (connection->s() != INVALID_SOCKET)
{
connection->SetIocpContent(pClient);
connection->OnRecv(pBuffer->buff, dwTrans);
iSend = FALSE;
::EnterCriticalSection(&g_cs);
m_mapconnection[pBuffer->sClient] = connection;
::LeaveCriticalSection(&g_cs);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值