Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Утечка памяти в конструкторах |
Автор: fear 7.6.2006, 13:14 | ||||
где-то в тексте программы
Возникает вопрос, при таком коде не возникает ли утечка памяти из за того что для переменной Qbject::m_ дважды выделяется память (сначала в конструкторе, затем в функции construct())? Как избежать утечки памяти, не отказываясь от конструктора по умолчанию? |
Автор: Fazil6 7.6.2006, 13:23 | ||||
|
Автор: Daevaorn 7.6.2006, 13:29 | ||||
fear, зачем m_ = new int(0); ?
зачем try? Так же проще:
Зачем самому себе усложнять жизнь? |
Автор: Fazil6 7.6.2006, 13:29 | ||
или
|
Автор: Prehistorik 7.6.2006, 14:59 |
А я больше согласен с Fazil6, Потому что иначе при повторном вызове construct будет опять же утечка.... |
Автор: fear 8.6.2006, 11:14 |
>to Prehistorik А где ты считаешь у Daevaorn утечка памяти? При повторном вызове construct() для m_ выделяться память уже не будет, изменится лишь значение. >to Daevaorn В твоём случае, если объект будет создан деструктором по умолчанию и ф-ция construct() не будет вызвана в деструкторе произойдёт ошибка при попытке освободить память не игициализированного объекта, на который ссылается m_. Проблему можно решить вызовом в конструкторе по умолчанию construct(0,0,0), который и выполнит m_ = new int(0); С этим вообщем всё понятно, что если m_ указатель на массив элементов, а y_ колличество элементов в массиве. (т.е. m_ = new int[y_];) Освобождать память, занимаемую массивом и выделять заново в функции construct() как предложил Fazil6, реализовать эту задачу можно, может кто знает другой способ? |
Автор: Daevaorn 8.6.2006, 11:50 | ||
fear, учите мат.часть товарищ
Легальный код |