我有以下代码:无法套接字对象移动到的std ::矢量
try
{
HAS::TCPServerSocket servSock(echoServPort); // Socket descriptor for server
std::vector<HAS::TCPSocket*> sockets(MAXCONN);
for (;;)
{
try
{
if (socketCount < MAXCONN)
{
HAS::TCPSocket* sock(servSock.accept());
sockets.push_back(sock);
std::thread handler(handleTCPClient, std::ref(sockets[socketCount++]));
handler.detach();
}
}
catch (...)
{
cerr << "Unable to create thread" << endl;
exit(1);
}
}
}
我想跟踪连接(MAXCONN=4)
的数量有限,想用std::vector
跟踪打开的套接字。不知何故,当我使用上面的代码时,sock
变量被正确设置为servSock.accept()
所接受的当前套接字。但是,当我尝试将sock
变量推入std::vector
时,我松开了袜子物体。
我有一种感觉它与正常指定的副本和/或移动的构造做的,但我已经定义了两个(及使用断点,看的时候会被调用),但他们似乎并没有得到所谓的在所有。
std :: vector套接字(MAXCONN); 这应该初始化你的矢量的最大尺寸是4? ...这不是如何矢量应该工作。 –
Alex
当'socketCount'达到最大大小时,你的程序将只是忙循环。这看起来像一个可怕的想法。另外,什么时候'socketCount'会被减少*? –
'std :: vector套接字(MAXCONN);'将初始化您的向量以包含四个空指针,它不会对最大大小做任何事情。 –