337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
||||||
1 | ||||||
Статический указатель класса на объект этого же класса16.08.2015, 20:36. Показов 2778. Ответов 25
Метки нет (Все метки)
Не пойму: что в этом коде не так?
0
|
16.08.2015, 20:36 | |
Ответы с готовыми решениями:
25
Указатель метода класса в другом методе этого класса Использование в качестве поля класса указатель на объект другого класса Указатель на объект базового класса и адрес объекта производного класса Правда, что указатель класса-наследника не может указывать на объект класса-родителя? |
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||
16.08.2015, 20:49 | 2 | ||||||||||||||||||||
Сообщение было отмечено nord_v как решение
Решение
замените:
но ещё лучше, если заменить статические поля на локальные статики:
Добавлено через 3 минуты здесь вы создаете объект, который живет по указателю а здесь:
в результате, процедура уничтожения объекта задействует диструктор, в которой опять дергается операция уничтожения, которая задействует диструктор, в которой опять дергается операция уничтожения... итого: вечная рекурсиия, пока стек не переполнится
1
|
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
|
|
16.08.2015, 20:52 | 3 |
delete из деструктора убери.
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
16.08.2015, 20:59 | 5 | ||||||||||
верно.
но дело не в этом. рассмотрим ваш код:
0
|
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
|
|
16.08.2015, 21:01 | 6 |
В чём задача? К чему эти мутные манипуляции?
0
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
16.08.2015, 21:05 [ТС] | 7 |
Так память не освобождается.
Это не про мой пример, в коде один вызов функции класса. Добавлено через 52 секунды Вопрос теоретический, не понял: почему деструктор бесконечно вызывается. Укзатель в единственном экземпляре, указывает на один объект, а деструктор бесконечно работает.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.08.2015, 21:11 | 8 |
ну если вы считаете,
что это нормально - конструировать функцию, которая потенциально способна допускать утечки памяти, и корректность работы целиком зависит от вызывающей стороны - дело ваше. однако в миру такого рода код называют "говнокодом". вы спросили, что не так с кодом - я вам ответил. дыра в безопасности, и бесконечная рекурсия при удалении объекта.
0
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
||||||
16.08.2015, 21:12 [ТС] | 9 | |||||
То есть так:
0
|
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
|
|
16.08.2015, 21:12 | 10 |
Ну какой он теоретический, если ты сам не понимаешь что хочешь.
Потому что delete подразумевает вызов деструктора, а в нём снова delete.
0
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
16.08.2015, 21:29 [ТС] | 11 |
Понятно, спасибо всем за разъяснения.
Добавлено через 12 минут hoggy, не сердитесь, я же написал, что вопрос теоретический, поэтому и пример кода - теоретический. Если этот объект мне уже не нужен, это будет утечкой памяти? Добавлено через 2 минуты nmcf,
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.08.2015, 21:33 | 12 |
дважды вызвал функцию - получил утечку.
вообще ваш оригинальный код не умеет корректно удалить объект по статическому указателю.
0
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
16.08.2015, 21:40 [ТС] | 14 |
Кто-то писал, что контролируемая утечка - это уже и не утечка?
Добавлено через 1 минуту Avazart, это не код, это теоретическая конструкция, будьте снисходительны к совсем начинающему.
0
|
16.08.2015, 21:52 | 15 |
Теоретическая конструкция как не надо писать код?
Что она вообще по вашему должен делать этот код? Возможно если бы было указано то что он хотелось сделать- был бы смысл комментировать код, а так в мусорку.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.08.2015, 21:58 | 18 |
в вашем случае она - не контролируемая,
поскольку их отсутствие не гарантируется инвариантом.
0
|
16.08.2015, 22:05 | 19 | |||||
А что есть такая?
Что мешает сделать так:
Ну или банально обвернуть указатель в объект другого класса.
0
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
16.08.2015, 22:14 [ТС] | 20 |
Это, как бы, утечка, которая не является утечкой: Что считать утечкой памяти?
0
|
16.08.2015, 22:14 | |
16.08.2015, 22:14 | |
Помогаю со студенческими работами здесь
20
Создать объект внутри класса, который может вызывать функцию этого класса Создание статической функции класса, которая принимает экземпляр этого же класса как объект Индексация массива класса, через объект этого класса В конструктор класса передать объект этого класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |