Показать полную графическую версию : C++ | Корректность использования realloc в парах new/delete
Если мне потребовалось больше памяти, чем я выделил с помощью new,
корректно ли будет увеличить её размер с помощью realloc, а в конце работы удалить при помощи delete?
знаю, что работает, но это правильно?
penykov
Нет, это неправильно.
А как тогда надо? Чтобы прежние данные сохранились.
vadimiron
07-08-2005, 18:33
Надо свою функцию написать, которая создаст нужное пространство в памяти (старый объём + новый), копирует туда старые данные (есть такие функции как memcpy() или memmove()) и удалит старое пространство в памяти.
Это примерный алгоритм.
а не лучше тогда забить на new и delete и пользоваться malloc, realloc, free?
penykov
не лучше, потому что new, new[], delete и delete[] вызывают конструктор/деструктор. Что весьма важно в C++.
Проще воспользоваться шаблоном vector<>. Он умеет всё, что нужно,
работает эффективно (в т.ч. старается уменьшить количество вызовов new/delete),
а в некоторых реализациях ещё и память пытается экономить.
Его можно использовать как универсальный буфер:
std::vector<double> my_table_func;
double d;
while (cin>>d)
{
my_table_func.push_back(d);
}
for(int i=0; i<my_table_func.size(); ++i)
{
cout << my_table_func[i] << '\n';
}
my_table_func.resize(my_table_func.size()*3 + 1);
for(int i=0; i<my_table_func.size(); ++i)
{
cout << my_table_func[i] << '\n';
}
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.