Come l'altro hanno detto, è necessario utilizzare il modulo di vettore di cancellazione:
void some_func(size_t n)
{
int* data = new int[n];
. . . // do stuff with the array
delete [] data; // Explicitly free memory
}
essere molto attenti a questo, perché alcuni compilatori non avvertire.
Ancora meglio, raramente c'è bisogno di usare il vettore nuovo/cancella.Considerare se il codice può essere modificato a fare uso di std :: vector:
void some_func(size_t n)
{
std::vector<int> data(n);
. . . // do stuff with the array
} // memory held by data will be freed here automatically
E se avete a che fare con la memoria in un ambito locale, è possibile utilizzare STLSoft s' auto_buffer, che assegnerà da un buffer interno (tenuto in pila, come parte dell'istanza), se possibile, solo andando al mucchio, se non ci riesce:
void some_func(size_t n)
{
stlsoft::auto_buffer<int, 10> data(n); // only allocates if n > 10
. . . // do stuff with the array
} // memory held by data will be freed here automatically, if any was allocated
more about auto_buffer Leggi.
Che richiama il comportamento non definito poiché l'array non è stato allocato con nuovo []. –