Вот в основном то, что я хочу сделать:Как пройти unique_ptr <char[]> к функции использовать
SerialPort::ReadBytes(int32& errcode, Message::string& msg, uint32 num)
{
DWORD numBytesRead = 0;
LPDWORD pNumBytesRead = &numBytesRead;
errcode = 0;
std::unique_ptr <char[]> buff (new char[num]);
// ^^^^ pass this char buffer to the ReadFile function below
if (!ReadFile(m_sp_pointer, // Handle to device
buff, // Receives data from device
num, // num bytes to read (in)
(LPDWORD)pNumBytesRead, // num bytes read (out)
NULL))
{
errcode = GetLastError();
}
if (numBytesRead > 0)
{
return true;
}
return false;
}
Я знаю, что я делаю это не правильно, так что мои вопросы: как я могу сделать это правильно и есть ли что-нибудь, что делает это плохой идеей? Заранее спасибо.
Редактировать: Я действительно должен проходить в unique_ptr в параметрах, а не локально объявлять его и передавать в Message::string& msg
.
Моя первоначальная попытка состояла в том, чтобы передать Message::string
(std::string
) ссылкой, так что это вариант тоже, т. Е. Вместо использования unique_ptr вообще. В , что случае я использовал бы регулярный char[]
локально, а затем установить msg
содержимое на char[]
и вернуть его.
Я не уверен, что было бы лучше, кажется, что несколько ответов рекомендуют vector<char>
. (Было бы очень похоже на использование std::string
).
Я бы использовал 'std :: vector buff (num);'. –
aschepler