|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||||||
Можно ли Конструктор и Деструктор вызывать как метод класса?29.06.2019, 12:03. Показов 22149. Ответов 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
|
|
|
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,449
|
||
| 30.06.2019, 22:06 | ||
|
0
|
||
| 30.06.2019, 22:06 | |
|
Зачем нужны конструктор и деструктор класса? Дописать конструктор и деструктор для класса Для класса задать конструктор и деструктор Конструктор (деструктор) у класса, не имеющего тип Создание класса с перегрузкой операторов конструктор и деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|