Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   C++ | Корректность использования realloc в парах new/delete (http://forum.oszone.net/showthread.php?t=52432)

penykov 06-08-2005 18:37 346359

C++ | Корректность использования realloc в парах new/delete
 
Если мне потребовалось больше памяти, чем я выделил с помощью new,
корректно ли будет увеличить её размер с помощью realloc, а в конце работы удалить при помощи delete?

знаю, что работает, но это правильно?

ivank 07-08-2005 17:09 346486

penykov
Нет, это неправильно.

penykov 07-08-2005 17:54 346494

А как тогда надо? Чтобы прежние данные сохранились.

vadimiron 07-08-2005 18:33 346498

Надо свою функцию написать, которая создаст нужное пространство в памяти (старый объём + новый), копирует туда старые данные (есть такие функции как memcpy() или memmove()) и удалит старое пространство в памяти.
Это примерный алгоритм.

penykov 08-08-2005 19:09 346708

а не лучше тогда забить на new и delete и пользоваться malloc, realloc, free?

ivank 08-08-2005 20:56 346725

penykov
не лучше, потому что new, new[], delete и delete[] вызывают конструктор/деструктор. Что весьма важно в C++.

pva 10-08-2005 13:57 347192

Проще воспользоваться шаблоном 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';
}



Время: 17:29.

Время: 17:29.
© OSzone.net 2001-