Jako drugi powiedział, należy skorzystać z formularza wektorowych Usuń:
void some_func(size_t n)
{
int* data = new int[n];
. . . // do stuff with the array
delete [] data; // Explicitly free memory
}
Bądź bardzo ostrożny z tym, ponieważ niektóre kompilatory nie będzie ostrzec.
Nawet bardzo rzadko istnieje potrzeba użycia wektora nowy/usunąć.Zastanów się, czy Twój kod może zostać zmieniony, aby skorzystać z 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
A jeśli masz do czynienia z pamięcią w zakresie lokalnym, należy rozważyć użycie STLSoft „s auto_buffer, który przydzieli z wewnętrznym buforze (przeznaczone na stosie, jako część instancji), jeśli to możliwe, tylko idzie do sterty, jeśli nie może ona:
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
Czytaj more about auto_buffer.
To wywołuje niezdefiniowane zachowanie, ponieważ tablica nie została przydzielona za pomocą nowego []. –