![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Решил поэкспериментировать с динамической памятью. В общем память, выделенная с помощью malloc() - должна освобождаться функцией free(). А new - с помощью delete <объект/тип> или delete []<объект/тип>. Хочу изменить в методе Add() класса MyArray размер динамической памяти с помощью старой функции realloc() языка С - нормально.
Вопрос такой: а хорошо/плохо то, что в деструкторе не free(), а delete [] при том, что в одном из методов используется realloc?
Это сообщение отредактировал(а) Voldemar2004 - 13.11.2006, 15:35 -------------------- i_i (';') (V) ![]() |
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Майерс точнобы заплакал
-------------------- <удалено администрацией форума> |
|||
|
||||
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
Канешь очень плохо. По стандарту: " Результат вызова delete для указателя, который не был получен из new, не определен".
|
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Так я и использую new и delete соответственно. Просто в методе Add() расширение памяти делается с помощью realloc().
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Нет. По идее realloc использовать тоже нельзя.
По причине, что указал AlexST. Лучше взять и перевыделить... Если громоздко - завернуть в отдельную функцию... |
|||
|
||||
| AlexST |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
Voldemar2004, calloc, malloc, free, realloc реализованы на одном алгоритме. new/delete - это другое.
Это сообщение отредактировал(а) AlexST - 14.11.2006, 19:02 |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Voldemar2004, полагаю плохо и вот почему: To new is C++; To malloc is C; To mix them is sin -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Rockie, я тоже читал недавно эту страницу.
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Зачем через вектор? Можно просто создать массив большей длинны чем нынешний, копируешь туда значения из маленького, удаляешь маленький массив и создаешь его заново увеличив размер, затем переносишь из вспомогательного массива данные в свой заново роженный и удаляешь вспомогательный.
-------------------- <удалено администрацией форума> |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
EvgenZ, эм. а вспомогательный то зачем вообще?
|
|||
|
||||
| BUGOR |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: 1 Всего: 16 |
Ну кстати на системном уровне пара new/delete аналогична malloc/free, просто появилась чуть позже, уже в С++, а вот что она там по стандартам возвращает я не в курсе.
|
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
А как? Как создать массив большего размера из массива не используя вспомогательного с сохранением данных?
-------------------- <удалено администрацией форума> |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Заранее выделять хотя бы в 2 раза больше, чем надо... в особых критичных случаях...
Как это, например, делает большинство STL- контейнеров. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Daevaorn, ну пускай будет 1.5... Суть остается неизменной...
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |