Tôi đã phát triển một hàm trợ giúp nhỏ cho một lớp thử nghiệm đơn vị, lấy số vector<unsigned char>
của mình và chuyển nó trở lại thành const char *
. Tôi đã viết điều này để tôi có thể chuyển nó tới sốcủa gtest để so sánh đơn giản. Ở đây là:Chức năng C++ trả về const char *
const char * convertVecToChar(std::vector<unsigned char>& source)
{
std::vector<unsigned char>::size_type size = source.size();
char* data = (char*)malloc(sizeof(char) * (size + 1));
memcpy(data, &source[0], size);
data[size] = 0;
return data;
}
Và đây là một ví dụ của nó được gọi là:
ASSERT_STREQ("de", convertVecToChar(somevector));
Tôi đoán đây là rò rỉ tuy nhiên như tôi gọi malloc
, nhưng mà không gọi delete
tiếp tục xuống đường?
Có cách nào thanh lịch hơn để thực hiện việc này không liên quan đến việc tạo biến riêng biệt const char *
cho mỗi lần tôi gọi ASSERT_STREQ
trong một phương pháp thử nghiệm không?
Cảm ơn trước vì tất cả các câu trả lời.
Chris
Sử dụng 'miễn phí() 'sau' malloc()', không phải 'DELETE'. – hmjd
+1 cho một câu hỏi thú vị. Tôi không thực sự có một câu trả lời, mặc dù. Điều này có vẻ giống như một hack khổng lồ chỉ để thử nghiệm đơn vị. Bạn đã cân nhắc tạo một 'ASSERT_VECEQ'? Ngoài ra, có lẽ bạn không nên quan tâm quá nhiều cho rò rỉ bộ nhớ trong các bài kiểm tra đơn vị. –
Được rồi, cảm ơn vì đã cho tôi biết. –