用unique_ptr 替代new

This commit is contained in:
JIe 2024-10-09 17:11:40 +08:00
parent 1417770918
commit 478421ee07

View File

@ -91,7 +91,8 @@ class Serial {
} }
template <SupportString T> template <SupportString T>
bool OpenDevice(T portName, unsigned int bauds = 115200, int delayTime = 0) { bool OpenDevice(T portName, unsigned int bauds = 115200,
int delayTime = 0) {
std::string reallyPortName; std::string reallyPortName;
std::format_to(std::back_inserter(reallyPortName), "\\\\.\\{}", std::format_to(std::back_inserter(reallyPortName), "\\\\.\\{}",
portName); portName);
@ -144,20 +145,18 @@ class Serial {
Log("Send: " + reallyCommand); Log("Send: " + reallyCommand);
std::this_thread::sleep_for(10ms); std::this_thread::sleep_for(10ms);
auto availableSize = ser.available(); auto availableSize = ser.available();
char *buffer = new char[availableSize + 1]; auto buffer = std::make_unique<char[]>(availableSize + 1);
std::memset(buffer, 0, availableSize); std::memset(buffer.get(), 0, availableSize);
auto size = ser.readBytes(buffer, availableSize, timeout); auto size = ser.readBytes(buffer.get(), availableSize, timeout);
if (size > 0) { if (size > 0) {
buffer[size] = '\0'; buffer[size] = '\0';
std::string response = std::string(buffer); std::string response = std::string(buffer);
Log("Receive: " + response); Log("Receive: " + response);
delete[] buffer;
if (removeEcho) if (removeEcho)
response.replace(0, reallyCommand.length(), ""); response.replace(0, reallyCommand.length(), "");
return response; return response;
} }
delete[] buffer;
return std::unexpected(SerialErrorCode::TIMEOUT); return std::unexpected(SerialErrorCode::TIMEOUT);
} }
@ -185,11 +184,10 @@ class Serial {
while (std::chrono::system_clock::now() < endTime) { while (std::chrono::system_clock::now() < endTime) {
std::this_thread::sleep_for(10ms); std::this_thread::sleep_for(10ms);
auto availableSize = ser.available(); auto availableSize = ser.available();
auto buffer = new char[availableSize + 1]; auto buffer = std::make_unique<char[]>(availableSize + 1);
auto size = ser.readBytes(buffer, availableSize, timeout); auto size = ser.readBytes(buffer.get(), availableSize, timeout);
buffer[size] = '\0'; buffer[size] = '\0';
auto str = std::string(buffer); auto str = std::string(buffer.get());
delete[] buffer;
if (size > 0) if (size > 0)
Log("Receive: " + str); Log("Receive: " + str);
if (((str.find(expect) != std::string::npos) && ...)) { if (((str.find(expect) != std::string::npos) && ...)) {