SfondoUtilizzando un puntatore intelligente per gestire la memoria allocata all'interno funzione
Se avevo una funzione foo
come segue
void foo(std::vector<int>& values)
{
values = std::vector<int>(10, 1);
}
Poi ho potuto chiamare come
std::vector<int> values;
foo(values);
noti che l'iniziale vector
è vuoto, quindi viene popolato all'interno della funzione foo
.
Spesso mi imbatto in interfacce che io non posso cambiare (cioè 3a parte), che hanno lo stesso intento come sopra, ma utilizzando le matrici prime, ad esempio
void foo(int*& values)
{
values = new int[10];
std::fill_n(values, 10, 1);
}
Il mio problema con questi è che ora io sono responsabile della gestione di quella memoria, ad es
int* values;
foo(values);
delete[] values;
Domanda
Esiste un modo posso usare puntatori intelligenti per gestire questa memoria per me? Mi piacerebbe fare qualcosa di simile
std::unique_ptr<int[]> values;
foo(values.get());
ma get
restituisce un puntatore che è un R-valore, quindi non posso passare per riferimento non-const.
Non so se questo è legale, ma lo fa compilo: http://coliru.stacked-crooked.com/a/860ae38fd2cdb4a2 – NathanOliver