|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||||||
Можно ли Конструктор и Деструктор вызывать как метод класса?29.06.2019, 12:03. Показов 21987. Ответов 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,448
|
||
| 30.06.2019, 22:06 | ||
|
0
|
||
| 30.06.2019, 22:06 | |
|
Зачем нужны конструктор и деструктор класса? Дописать конструктор и деструктор для класса Для класса задать конструктор и деструктор Конструктор (деструктор) у класса, не имеющего тип Создание класса с перегрузкой операторов конструктор и деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|