![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 23.12.2010
Сообщений: 4
|
![]()
есть такая программа:
Код:
подскажите, что у делаю не так заранее спасибо |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
![]()
может после выполнения getchar срабатывают деструкторы? поставь точку останова в деструкторе посмори прыгнет ли туда
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 23.12.2010
Сообщений: 4
|
![]()
вызывается, но мусором переменные захламляются раньше(((
и никак не могу понять почему( |
![]() |
![]() |
![]() |
#4 |
Регистрация: 29.11.2010
Сообщений: 7
|
![]()
Перегрузка конструкторов не совсем верно организованно
Здесь: Зачем? CNode::CNode(const CNode& _n) : x(_n.x) , y(_n.y) , number(_n.number) , st_sv(_n.st_sv) { } код явно стырили. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
![]()
Откомпелил ваш (пост выше говорит что не ваш) код, l на самом деле остается там все значения такие а вот у остальыне классы как раз там вызывается деструктор .. почему хз.. может компилер решил удалить их пораньше потому как дальше по тексту не идет их использования?
ЗЫ: да нет что то тут не то) деструктор вызвался из CBasefelem::CBasefelem .. причем обратите внимание в конструкторе передается параметр по значению а присваивается в мембер по ссылке.. после отработки конструктора переменная из параметров уничтожается(так как в стеке) отсюда видат ьи деструктор Последний раз редактировалось UltimaBeaR; 23.12.2010 в 20:06. |
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 23.12.2010
Сообщений: 4
|
![]()
ммм, код мой, перегрузка конструктора потому, что с указателями работаю.
присваивается по ссылке потому, что присваивается указателю, разве это не верно? |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Да. Ты передаешь конструктору CBasefelem параметры по значению. При этом компилятор создает в стеке их копию, и после вызова конструктора эту копию уничтожает. И поля-указатели в классе показывают теперь туда, где ничего уже нет )
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
![]()
передавай по ссылке, а в конструкторе выделяй память под экземпляр и копируй туда переданный.. или если хочешь без указателя то поидее в инициализационной части просто передаешь эту же ссылку... это если ты хочешь чтобы была копия внутри.. если просто указатель нужен, то тожесамое все тока без выделения памяти
ЗЫ: если не врубился про стек и удаление.. то запомни вот чего: Код:
Последний раз редактировалось UltimaBeaR; 23.12.2010 в 20:23. |
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 23.12.2010
Сообщений: 4
|
![]()
я про все врубился))
просто я исправил уже спасибо ошибка была в том что надо было так Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с классами | sazonoff.13 | Помощь студентам | 1 | 07.10.2010 10:45 |
C# ошибка с классами | nuevegramodelamor | Помощь студентам | 0 | 04.10.2010 12:45 |
Работа с классами | Superlotles | Общие вопросы C/C++ | 6 | 16.06.2010 17:15 |
проблемма с классами | ciaonataha | Общие вопросы C/C++ | 1 | 24.07.2009 18:04 |
Вопрос с классами. | Вадим Буренков | Общие вопросы Delphi | 11 | 13.07.2009 10:57 |