You have the syntax down right, however your reasoning is, slightly, flawed:
I cannot use std::string because I have to pass the array in the recv function.
While string might not be the right interface, vector definitely is. The primary reason for vector being a contiguous array is interoperability with C.
You can thus write:
void ReadMyPacket(int Socket)
{
std::vector<char> inStartup(2);
int recvReturn = recv(Socket, &inStartup.at(0), inStartup.size(), 0);
//...
//...
}
And this way you will avoid risks of forgetting to call delete[] yourself (for example, in case of exception).
Note: in C++11 and higher you can use inStartup.data() instead of &inStartup.at(0).
shared_ptr<>if you want. Smart pointers are good for you. As @Cyber mentioned, there is nothing wrong with it unless you are intending to do something more with it (and tell us what).