我正在从事网络编程,我看到有人使用 vector 作为套接字的输入缓冲区而不是字符数组。
我想知道这样做有什么好处。
提前致谢..
最佳答案
A vector<char>
本质上只是一个托管字符数组。
所以你可以这样写:
{
vector<char> buf(4096);
...
int result = recv(fd, &buf[received_so_far], buf.size() - received_so_far);
...
}
vector “知道”它的大小,所以你可以使用 buf.size()
无处不在,永远不必担心缓冲区溢出。您还可以在声明中更改大小并使其在任何地方都生效,而无需任何困惑的#defines。
buf
的使用将在堆上分配底层数组,并在 buf
时自动释放它。超出范围,不管它是如何发生的(例如异常或提前返回)。因此,您可以获得良好的堆栈分配语义,同时仍将大对象保留在堆上。
您可以使用 buf.swap()
将底层字符数组的“所有权”交给另一个 vector<char>
非常有效。 (这对网络流量来说是个好主意......现代网络速度很快。你最不想做的就是为你从网络接收到的每个字节创建另一个拷贝。)而且你仍然不必明确地担心释放内存。
对于这个特定的应用程序,这些是我脑海中浮现的巨大优势。
关于c++ - 使用 vector<char> 作为输入缓冲区比 char 数组有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435171/