Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
9 / 9 / 0
Регистрация: 27.01.2013
Сообщений: 248

Объект в деструкторе

06.07.2013, 20:39. Показов 2078. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, выручайте, взрыв мозга ))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
class a
{
   
    public int u;
    
    
    ~a()
    {
        a hhhh = new a();
        Console.WriteLine(u);
        hhhh.u = ++u;
    } 
}
class b
{
    static void Main()
    {
        a Prog;
        Prog = new a();
        
                  
    }
}
Как видно из кода, то я в деструкторе создаю объект. При выполнении данного кода переменная u инкрементируется и выводится на экран. Но если написать в деструкторе вот так Console.WriteLine(hhhh.u); то инкремента не происходит. ПОЧЕМУ ТАК??? Всем спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2013, 20:39
Ответы с готовыми решениями:

Можно ли в деструкторе обнулять ссылки
Здравствуйте! Можно ли в деструкторе C# обнулять ссылки для того, чтобы объект был уничтожен GC?

Узнать объект, в котором создался другой объект
Есть первый класс, который создает второй класс, код которого ниже. Как мне во втором классе получить ссылку на объект класса, который...

Найти объект, ссылающийся на заданный объект
Пишу игру растения против зомби. Дабы централизировать всю логику передвижений и действий юнитов, их реализация не включает в себя...

24
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
06.07.2013, 20:58
C#
1
2
 Console.WriteLine(u);
        hhhh.u = ++u;
на
C#
1
2
hhhh.u = ++u;
Console.WriteLine(hhhh.u);
мм?

Добавлено через 48 секунд
инкремент идет после вывода. А надо бы сначала увеличить, потом вывести.
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
06.07.2013, 21:10
C#
1
2
3
4
5
~a()
{
    a hhhh = new a();
    // ...
}
Деструктор объекта a создаёт объект a... Вот это поворот!
0
9 / 9 / 0
Регистрация: 27.01.2013
Сообщений: 248
06.07.2013, 21:10  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
C#
1
2
 Console.WriteLine(u);
        hhhh.u = ++u;
на
C#
1
2
hhhh.u = ++u;
Console.WriteLine(hhhh.u);
мм?

Добавлено через 48 секунд
инкремент идет после вывода. А надо бы сначала увеличить, потом вывести.
Не это не то, все равно тоже самое, только начало другое.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.07.2013, 21:14
Уау, хочу у себя это затестить, по моим прикидкам это рекурсивно и красиво зависнет.
Ну да, у меня после завершения 50к объектов удаляется.

Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
 
namespace ConsoleApplication72
{
    class A
    {
 
        public int u;
 
 
        ~A()
        {
            A hhhh = new A();
            Console.WriteLine(u);
            hhhh.u = ++u;
        }
    }
 
    class B
    {
        static void Main()
        {
            GetValue();
            Console.ReadKey();
        }
            
        private static void GetValue()
        {
            A prog = new A();
            Console.WriteLine(prog);
        }
    }
}
0
9 / 9 / 0
Регистрация: 27.01.2013
Сообщений: 248
06.07.2013, 21:18  [ТС]
Кто нибудь скажет что происходит??? Почему деструктор выполняется 15000 раз???
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
06.07.2013, 21:23
Цитата Сообщение от Psilon Посмотреть сообщение
рекурсивно
вот что.

Добавлено через 3 минуты
Не совсем рекурсия, но суть, при уничтожении одного объекта создается другой экземпляр и т.д..
0
9 / 9 / 0
Регистрация: 27.01.2013
Сообщений: 248
06.07.2013, 21:24  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
вот что.

Добавлено через 3 минуты
Не совсем рекурсия, но суть, при уничтожении одного объекта создается другой экземпляр и т.д..
получается кто быстрее???
0
06.07.2013, 21:26

Не по теме:

Объясните человеку. :)

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.07.2013, 21:31
IamRain, и чем это не рекурсия?

Добавлено через 24 секунды
bazyzy, "У попа была собака, он её любил". Как объяснить проще я не знаю.
0
9 / 9 / 0
Регистрация: 27.01.2013
Сообщений: 248
06.07.2013, 21:34  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
IamRain, и чем это не рекурсия?

Добавлено через 24 секунды
bazyzy, "У попа была собака, он её любил". Как объяснить проще я не знаю.
почему оно столько раз повторяется, я вроде понял. но почему инкрементируется водном случае норм. в другом нет.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
06.07.2013, 21:38
Цитата Сообщение от Psilon Посмотреть сообщение
IamRain, и чем это не рекурсия?
Рекурсия - вызов метода в собственном теле. А тут: деструктор одного объекта завершается и только тогда срабатывает деструктор другого объекта (в режиме отладки по крайней мере). Больше похоже на реккурентное соотношение. Вообщем, не стоит зацикливаться.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.07.2013, 21:46
IamRain,
Рекурсия - вызов метода в собственном теле.
неверно.

рекуррентное соотношение - это и есть соотношение на основании рекурсии. Существует прямая рекурсия А вызывает A, есть косвенная, A -> B, а B -> A.
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
06.07.2013, 21:53
Цитата Сообщение от Psilon Посмотреть сообщение
неверно.
С точки зрения программирования, говоря самым stupid языком, как нам на 1 курсе объясняли, рекурсия - это когда в теле метода содержится вызов самого себя. Так и запомнил.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.07.2013, 21:59
IamRain, ну во-первых более полное определение рекурсии даже с точки зрения примитивного программирования я описал, во-вторых после курса мат. логики, после вопросов "перечислите 6 способов задания рекурсивного множества", "опишите оператор минимизации для данной частично-рекурсивной функции", "напишите, чему равен номер данной примитивно-рекурсивной функции согласно нумерации Геделя" начинаешь немного шире смотреть на вопросы рекурсии.

В частности, рекурсия есть любой эффективно вычислимый алгоритм, то есть по сути все что угодно это рекурсия. Которую мы эмулируем через циклы и т.д.

Эта правда было не на 1, а уже на 2 курсе

Добавлено через 1 минуту
IamRain, Озарение наступает, когда понимаешь, что можешь дописывать википедию

Вот тут чуть подробней рассказывается: http://ru.wikipedia.org/wiki/%... 2%D0%B8%29
0
06.07.2013, 22:01

Не по теме:

Это в каком же университете так натаскивают, если не секрет? :)

0
06.07.2013, 22:02

Не по теме:

IamRain, МАИ, кафедра АСУ :D

0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
06.07.2013, 22:06

Не по теме:

А - ?
у меня одноклассник в МЭИ учится. Другой в РГУ нефти и газа. Остальные, которые в Москве - не технари. Точнее, учились.



Добавлено через 2 минуты

Не по теме:

Авиационный - ого. Представляю как в Бауманке. Говорят, студенту Бауманки тубус заменяет все. :)

0
06.07.2013, 22:07

Не по теме:

IamRain, не знаю, у нас половина учащихся - перевелись с Бауманки, нормальные люди в основном :) Мозг тот же, скелет, вроде, тоже :)

0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
07.07.2013, 11:12
Цитата Сообщение от bazyzy Посмотреть сообщение
почему оно столько раз повторяется, я вроде понял. но почему инкрементируется водном случае норм. в другом нет.
Вам нужно просто понять, что некоторые вещи просто не следует писать. Создание объекта в деструкторе того же класса - это ужас дикий, никогда так не делайте. Инкремент и декремент всегда пишите, так чтобы сразу было видно, что он делает, ваш код будут люди читать. И читайте сначала Шилдта!
Особенно с таким уровнем знаний, когда не знаешь, что такое рекурсия, как работает инкремент и так далее.

Добавлено через 56 минут
Не имея технического образования, а лишь медицинское, осмелюсь присоединиться к спору о том, что такое рекурсия.
В многоуважаемой книге "Structure and Interpretation of Computer Program" написано
Когда мы говорим, что процедура рекурсивна, мы имеем в виду факт синтаксиса: определение процедуры ссылается (прямо или косвенно) на саму эту процедуру.
Цитата Сообщение от IamRain Посмотреть сообщение
Рекурсия - вызов метода в собственном теле.
Я тоже её себе так представляю.
Цитата Сообщение от Psilon Посмотреть сообщение
В частности, рекурсия есть любой эффективно вычислимый алгоритм, то есть по сути все что угодно это рекурсия.
Ужас. У меня разрыв шаблона.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2013, 11:12
Помогаю со студенческими работами здесь

Объект ссылается на объект. Приравнивание объектов
Сегодня понял что видимо мое представление об объекте было в корне не верно. До сих пор считал что если: object a = null; object b = a;...

Автоматически добавить объект в объект
Приветствую тебя читатель. Попытаюсь объяснить чего я хочу, если не понятно уточняйте. Вообщем дело такое, есть объект который...

Ошибка "Ссылка на объект не указывает на экземпляр объект" в программе
Здравствуйте ! Ссылка на объект не указывает на экземпляр объекта. Примерно понимаю в чём ошибка, но как исправить не знаю using...

Ошибка в деструкторе
есть базовый абстрактный класс и есть производный от него: #ifndef EMPLOY_H #define EMPLOY_H class Employee { public: ...

Повисание в деструкторе
Есть такой код: //staff.h class staff abstract { protected: int salary; char* name; char* id; static staff* start;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru