|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||||||
Можно ли Конструктор и Деструктор вызывать как метод класса?29.06.2019, 12:03. Показов 20130. Ответов 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 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 30.06.2019, 18:50 | ||
|
Конструктор не создает буфер объекта. О инициализирует инстанс - т.е. только инициализирует значения в уже созданном и переданном ему буфере. Точно так же деструктор не уничтожает буфер. Он только разрушает инстанс - т.е. приводит объект в состояние безопасное для уничтожения буфера или переиспользования его другим инстансом.
1
|
||
|
"C with Classes"
|
||
| 30.06.2019, 19:06 | ||
|
1
|
||
|
Отпрыск ChatGPT
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
|
|
| 30.06.2019, 22:06 | |
|
_stanislav, вот это правильно, лучше всегда заново вызывать конструктор чтобы обновить ссылки и указатели. Вообще не понимаю о чем спор, использовать оставшийся в памяти призрак деструктированного объекта в любом случае плохо.
0
|
|
|
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
|
||
| 30.06.2019, 22:06 | ||
|
0
|
||
| 30.06.2019, 22:06 | |
|
Помогаю со студенческими работами здесь
80
Зачем нужны конструктор и деструктор класса? Дописать конструктор и деструктор для класса Для класса задать конструктор и деструктор Конструктор (деструктор) у класса, не имеющего тип Создание класса с перегрузкой операторов конструктор и деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|