![]() |
C++ | Корректность использования realloc в парах new/delete
Если мне потребовалось больше памяти, чем я выделил с помощью new,
корректно ли будет увеличить её размер с помощью realloc, а в конце работы удалить при помощи delete? знаю, что работает, но это правильно? |
penykov
Нет, это неправильно. |
А как тогда надо? Чтобы прежние данные сохранились.
|
Надо свою функцию написать, которая создаст нужное пространство в памяти (старый объём + новый), копирует туда старые данные (есть такие функции как memcpy() или memmove()) и удалит старое пространство в памяти.
Это примерный алгоритм. |
а не лучше тогда забить на new и delete и пользоваться malloc, realloc, free?
|
penykov
не лучше, потому что new, new[], delete и delete[] вызывают конструктор/деструктор. Что весьма важно в C++. |
Проще воспользоваться шаблоном vector<>. Он умеет всё, что нужно,
работает эффективно (в т.ч. старается уменьшить количество вызовов new/delete), а в некоторых реализациях ещё и память пытается экономить. Его можно использовать как универсальный буфер: Код:
std::vector<double> my_table_func; |
Время: 17:29. |
Время: 17:29.
© OSzone.net 2001-