![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
fear |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
где-то в тексте программы
Возникает вопрос, при таком коде не возникает ли утечка памяти из за того что для переменной Qbject::m_ дважды выделяется память (сначала в конструкторе, затем в функции construct())? Как избежать утечки памяти, не отказываясь от конструктора по умолчанию? |
||||
|
|||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
|
||||
|
|||||
Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
fear, зачем m_ = new int(0); ?
зачем try? Так же проще:
Зачем самому себе усложнять жизнь? Это сообщение отредактировал(а) Daevaorn - 7.6.2006, 13:30 |
||||
|
|||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
или
Это сообщение отредактировал(а) Fazil6 - 7.6.2006, 13:31 |
|||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 1 Всего: 3 |
А я больше согласен с Fazil6, Потому что иначе при повторном вызове construct будет опять же утечка....
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
>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 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
fear, учите мат.часть товарищ
Легальный код |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |