我有如下功能
void ReadMyPacket(int Socket)
{
char *inStartup = new char[2];
int recvReturn = recv(Socket, inStartup, 2, 0);
...
...
delete[] inStartup;
}
我应该如何释放inStartup的内存?我不能使用std :: string,因为我必须在recv函数中传递数组。
最佳答案
您的语法语法不对,但是您的推理略有缺陷:
我不能使用std::string
,因为我必须在recv
函数中传递数组。
虽然string
可能不是正确的界面,但vector
绝对是正确的界面。 vector
是连续数组的主要原因是与C的互操作性。
您可以这样写:
void ReadMyPacket(int Socket)
{
std::vector<char> inStartup(2);
int recvReturn = recv(Socket, &inStartup.at(0), inStartup.size(), 0);
//...
//...
}
这样,您将避免忘记自己打电话
delete[]
的风险(例如,在发生异常的情况下)。注意:在C ++ 11和更高版本中,可以使用
inStartup.data()
代替&inStartup.at(0)
。