|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||||||
Можно ли Конструктор и Деструктор вызывать как метод класса?29.06.2019, 12:03. Показов 21064. Ответов 222
Метки нет (Все метки)
Собственно вопрос:
можно ли Конструктор и Деструктор вызывать вручную, как обычный метод класса? Например, я хочу управлять очередностью вызовов. См. пример:
0
|
||||||
| 29.06.2019, 12:03 | |
|
Ответы с готовыми решениями:
222
Как правильно вызывать конструктор шаблонного класса? Можно ли явным образом вызывать деструктор? Конструктор и деструктор анонимного класса |
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||||||
| 30.06.2019, 15:57 | |||||||||
|
ты оперируешь только одним объектом string а на деле здесь два объекта старый объект + новый объект = 2 сущности но ты использовал ту сущность чей лайфтайм истек еще не говорит что это тот же самый объект. Допустим у нас есть два экземпляра разных классов:
![]() Кстати, сейчас протестировал - так и получилось. Для двух разных объектов был выдан один и тот же адрес.
0
|
|||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 30.06.2019, 16:00 | |
|
0
|
|
|
"C with Classes"
|
|
| 30.06.2019, 16:02 | |
|
Undisputed, кстати согласен, если по одному и тому же адресу размещать вызывать 10 раз конструктор, то по одному и тому же адресу будет размещено по очереди 10 разных объектов (в смысле перезапишутся).
0
|
|
|
Комп_Оратор)
|
|||
| 30.06.2019, 16:10 | |||
|
hoggy, Ребята, которые пишут такое, - весёлые парни. Впрочем, выбора у нас нет. ![]() Есть ещё кое-что. Б. Страуструп считает, что объект в программе это сущность которая имеет уникальный адрес. Если принять трактовку о пересоздании объектов как "новых" объектов по старым адресам, то суть меняется. Хотя для каждого момента и будут разные но уникальные объекты, на каждый момент времени (атомарность не затрагиваем), но ссылки инициализированные ранее будут связаны с разными объектами. Если это будет закреплено на уровне оптимизаций, язык может понести урон. Ну да, поживём - увидим.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||
| 30.06.2019, 16:11 | |||||||||
|
вникай немножко в то, что там написано. тебе показать как на практике выглядит "использование сущность чей лафтайм истек"?
если по адресу Пети ты разместил Васю, то очевидно жеж, что теперь там живет Вася. но если по некоторому адресу Пети, ты разместил Петю, то внезапно там живёт тот же самый Петя. И если Вася воскресил Петю, а тебе не сказал, то ты не просто не заметишь никакой разницы между прежним Петей и воскрешенным. у тебя в принципе нет, и не может быть никаких способов, как догадаться, что это уже - новый Петя. самое главное, что с практической точки зрения, это совершенно не важно. новый Петя абсолютно ничем не отличается от прежнего.
0
|
|||||||||
|
"C with Classes"
|
|
| 30.06.2019, 16:17 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 30.06.2019, 16:19 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 30.06.2019, 16:23 | |||
|
Что касается Вась и Петь думаю это просто твои фантазии, не более ![]() В С++ же нет такого понятия как "воскресил". И пример кстати не удачный. Есть два одинаковых компьютера Один находится в комнате потом его забирают на свалку И ставят на его место второй Это же не значит что это тот же самый компьютер Пусть даже если параметры у них 1 в 1 Это два разных компьютера Считай new - это команда собрать компьютер. Да, такого же типа, но уже второй...
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 30.06.2019, 16:52 | ||||
|
вызвал деструктор, объект считается недействительным. почему недействительным? потому что деструктор зачистил все ресурсы, которые нужны классу для работу. без этих ресурсов корректная работа попросту невозможна. но это не значит, что сам кусок памяти теперь радиоактивен, и им в принципе нельзя пользоваться. создай по этому же адресу любой объект, и используй его на здоровье. Петя у меня там как Исскус Христос. сначала его убивают (зовут деструктор) а потом воскрешают (зовут new placement) 1. понять, когда объект сдох (им нельзя пользоваться), а когда он живой (можно пользоваться) что бы ты не трактовал корректный код как UB 2. понять, что если по некоторому адресу жил Петя, и вот прямо сейчас там тоже живет Петя, то совершенно не важно: это уже новый Петя, или старый. на практике (для всего вызывающего кода) это просто Петя. назови его "новым Петей", и что изменится от этого? ничего. ты сейчас занимаешься словоблудием.
0
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
| 30.06.2019, 17:07 | ||||||
![]() ![]() во вторых причины на самом деле в данном случае не важны важен сам факт что объект уже просрочен и пользоваться им уже нельзя там можно размещать объект но это уже будет новый объект а не тот что был там прежде создай/размести объект по этому адресу, но не "воскреси" прежний объект... ![]() Но мы сейчас говорим о С++, а не о религии...
0
|
||||||
|
Комп_Оратор)
|
||
| 30.06.2019, 17:08 | ||
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 30.06.2019, 18:41 | ||||||
|
технически, экземпляр класса - кусок памяти. за манипуляции с памятью отвечает класс: набор методов обработки онной. тогда важным тебе для тебя должен был оказаться тот факт, что объект вполне себе можно переинициализировать и реюзать. ты уловил сей очевидный момент? который определяет смысл содержимого памяти. если адрес и тип не изменились, значит это - тот же самый объект. ты, конечно, можешь считать, что разместил по старому адресу новый объект такого же типа, о чем я уже не однократно сообщал тебе выше, суть от этого не изменится. с технической точки зрения - это все тот же самый объект. на практике это означает, что все ссылки/итераторы на "предыдущий" объект сохраняют свою валидность, и им фиолетово, что конкретно ты решил назвать его "новым" объектом. нет, не бинго. между "создать объект такого же типа по прежнему же адресу" и "воскресить объект" нет никакой разницы. ты же пишешь об этом так, словно есть какая то принципиальное различие. в чем различие, ты объяснить конечно не сможешь.
0
|
||||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 30.06.2019, 18:50 | ||
|
Конструктор не создает буфер объекта. О инициализирует инстанс - т.е. только инициализирует значения в уже созданном и переданном ему буфере. Точно так же деструктор не уничтожает буфер. Он только разрушает инстанс - т.е. приводит объект в состояние безопасное для уничтожения буфера или переиспользования его другим инстансом.
1
|
||
|
"C with Classes"
|
||
| 30.06.2019, 19:06 | ||
|
1
|
||
|
Отпрыск ChatGPT
266 / 31 / 4
Регистрация: 18.06.2019
Сообщений: 155
|
|
| 30.06.2019, 22:06 | |
|
_stanislav, вот это правильно, лучше всегда заново вызывать конструктор чтобы обновить ссылки и указатели. Вообще не понимаю о чем спор, использовать оставшийся в памяти призрак деструктированного объекта в любом случае плохо.
0
|
|
|
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,441
|
||
| 30.06.2019, 22:06 | ||
|
0
|
||
| 30.06.2019, 22:06 | |
|
Зачем нужны конструктор и деструктор класса? Дописать конструктор и деструктор для класса Для класса задать конструктор и деструктор Конструктор (деструктор) у класса, не имеющего тип Создание класса с перегрузкой операторов конструктор и деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|