Attualmente sto mantenendo un codice che fa un uso liberale dei puntatori grezzi dove std::vector
sarebbe un'opzione migliore. Peggio ancora, questi puntatori non sono sempre gestiti correttamente (quando viene eseguito con Intel Inspector, viene visualizzato il messaggio di avviso "Avviso: vengono riportati solo i primi 100.000 problemi di memoria"). In quanto tale, ho lentamente modificato tutte le istanze dei puntatori non elaborati in std::vector
. Tuttavia, ci sono diverse funzioni che si aspettano un puntatore raw come input e invece di modificare tutte le dichiarazioni e le definizioni delle funzioni, ho semplicemente acceduto al puntatore raw associato a std::vector
. I.e, codice che era:
double *doubleVec = new double[size];
//code that puts values in doubleVec
someFunc(doubleVec);
diventa
std::vector<double> doubleVec(size);
//code that puts values in doubleVec
someFunc(&doubleVec.front());
Questa è considerata una cattiva pratica? Da un lato, sto usando una classe wrapper e poi ignoro completamente il wrapper nelle chiamate di funzione, il che non ha molto senso. D'altra parte, il punto della classe wrapper è di occuparsi della gestione della memoria, e poiché le chiamate di funzione non interferiscono con la memoria in alcun modo, sta facendo il suo lavoro.