Ho sviluppato una piccola funzione di supporto per una classe di test dell'unità, che prende il mio vector<unsigned char>
e lo converte in un const char *
. Ho scritto questo così posso passarlo alla macro ASSERT_STREQ
di gtest per semplici confronti. Eccolo:Funzione C++ restituendo 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;
}
Ed ecco un esempio di esso che è chiamato:
ASSERT_STREQ("de", convertVecToChar(somevector));
Presumo che questo è che perde tuttavia come sto chiamando malloc
, ma senza chiamare delete
a valle della strada?
Esiste un modo più elegante per eseguire questa operazione, che non comporta la creazione di una variabile const char *
separata per ogni volta che si chiama ASSERT_STREQ
all'interno di un metodo di prova?
Grazie mille in anticipo per tutte le risposte.
Chris
Usa 'free()' 'dopo malloc()', 'non delete'. – hmjd
+1 per una domanda interessante. Non ho davvero una risposta, però. Questo sembra un attacco gigantesco solo per i test unitari. Hai preso in considerazione la creazione di un 'ASSERT_VECEQ'? Inoltre, forse non dovresti preoccuparti troppo delle perdite di memoria nei test unitari. –
Ok, grazie per avermelo fatto notare. –