У меня есть рекурсивная функция, определенная вроде этого: < /p>
void routine(int* old_arr, int k, int depth) {
if (depth == 15) return;
int* new_arr = new int[size];
// some operation that builds new_arr values out of old_arr values
delete [] old_arr; // if i dont need old_arr anymore, can I just do this?
for (int i = 0; i < 3; i++) {
routine(new_arr, k);
}
return;
}
< /code>
Если вы заметите, на 2 -м вызове цикла для цикла будет двойной бесплатный. < /p>
См. вдоль тройного дерева. Аргумент функции Old_ARR используется для заполнения значений нового массива, называемого new_arr. Обратите внимание на Old_ARR только для вычисления значений на следующей глубине. Если у меня нет никакой свободной рутины, у меня будет много этих указателей, плавающих вокруг потребления памяти и ничего не делать. Что такое хороший дизайн в этом? >
shared_ptr new_arr(new int[size]);
// operators to initialize new_arr with old_arr
if (old_arr.use_count() == 1) old_arr.reset()
< /code>
Это правильная идея? РЕДАКТИРОВАТЬ: На самом деле это тоже не сработает.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -loops-c20
Управление памятью с рекурсией и для петель (C ++ 20) ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1738317731
Anonymous
У меня есть рекурсивная функция, определенная вроде этого: < /p>
void routine(int* old_arr, int k, int depth) {
if (depth == 15) return;
int* new_arr = new int[size];
// some operation that builds new_arr values out of old_arr values
delete [] old_arr; // if i dont need old_arr anymore, can I just do this?
for (int i = 0; i < 3; i++) {
routine(new_arr, k);
}
return;
}
< /code>
Если вы заметите, на 2 -м вызове цикла для цикла будет двойной бесплатный. < /p>
См. вдоль тройного дерева. Аргумент функции Old_ARR используется для заполнения значений нового массива, называемого new_arr. Обратите внимание на Old_ARR только для вычисления значений на следующей глубине. Если у меня нет никакой свободной рутины, у меня будет много этих указателей, плавающих вокруг потребления памяти и ничего не делать. Что такое хороший дизайн в этом? >
shared_ptr new_arr(new int[size]);
// operators to initialize new_arr with old_arr
if (old_arr.use_count() == 1) old_arr.reset()
< /code>
Это правильная идея? РЕДАКТИРОВАТЬ: На самом деле это тоже не сработает.
Подробнее здесь: [url]https://stackoverflow.com/questions/79402314/managing-memory-with-recursion-and-for-loops-c20[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия