我有如下功能

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)

10-08 20:04