|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||||||
Можно ли Конструктор и Деструктор вызывать как метод класса?29.06.2019, 12:03. Показов 21982. Ответов 222
Метки нет (Все метки)
Собственно вопрос:
можно ли Конструктор и Деструктор вызывать вручную, как обычный метод класса? Например, я хочу управлять очередностью вызовов. См. пример:
0
|
||||||
| 29.06.2019, 12:03 | |
|
Ответы с готовыми решениями:
222
Как правильно вызывать конструктор шаблонного класса? Можно ли явным образом вызывать деструктор? Конструктор и деструктор анонимного класса |
|
Комп_Оратор)
|
||||||||
| 02.07.2019, 17:26 | ||||||||
|
эти ребята (как и мы все кроме вас) до сих пор проверяют по адресу. Не верите? Смотрите:
Fulcrum_013, гробить такую тему, - не уважать время всех кто в ней высказался более или менее разумно, но полезно. Иной раз и не разумное высказывание придаёт теме объём, так как активирует контр аргументы. Но ресурс вашего инстанса кончился. Желание и потенция не должны драться. Это может испортить характер.
0
|
||||||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 02.07.2019, 17:42 | |
|
IGPIGP, Ну они вообще то не новизну объекта проверяют а то что не происходит присваивание самому себе. Им передали 2 ссылки. Объект ни по одной из них изменится за это время не может потому что они ничего не удаляют и не создают. Очевидно что в один и тот же момент времени по одному и тому же адресу находится может только один и тот же объект.
У нас же разговор о том новый ли объект или старый после того как он пересоздался по тому же адресу. Т.е. в разные моменты времени. Добавлено через 6 минут Т.е. эти ребятки не проверяют старый он или новый. Они проверяют что он тот же
0
|
|
|
Комп_Оратор)
|
||
| 02.07.2019, 17:42 | ||
|
Жизнь всё ставит на места. Я вам показал как проверяется тождественность. Объект проверяет "Кто я?". Fulcrum_013, похоже что бесполезно вам объяснять вещи любого уровня. Продолжать больше не стану. Может у кого-то найдётся немного желания вас покормить, но я больше не буду. За сим и покидаю ваше общество. Ибо сами вы не уйдёте, ясно же как день.
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 02.07.2019, 18:10 | ||
|
0
|
||
|
Комп_Оратор)
|
|||
| 02.07.2019, 19:30 | |||
|
Я попробую ещё раз. Смотрите. Это поймёт и ребёнок. Вопрос: Будет ли объект после деинициализации (деструктором) и реинициализации (конструктором) тем же объектом что и был до этого с точки зрения программы. 1. Что такое объект? Свободные сочинения, включая стандарт оставим пока. Старое определение которое сводилось к типу и адресу нормально работают и сегодняшняя практика определения тождественности сводится к проверке этих условий. Повторяю, можно придумать чертей что ещё, но если оно не идентифицируется это будет религиозная лирика. 2. Что такое инициализация? Объект создаётся в две фазы: выделение памяти и её инициализация. После выделения памяти и регистрации (типизированный дескриптор или как-то ещё) в память записывается начальное состояние. То есть, конструктор отвечает за то, чтобы объект приобрёл начальное состояние в момент рождения и до любых обращений к нему клиентского кода. Но является ли вторая фаза частью идентифицируюшей объект? Конечно нет. Состояние и объект нельзя смешивать без разрушения абстракции: объект. Константы времени компиляции - статические члены и не могут идентифицировать объект. Константы времени выполнения - мягкий контракт с программистом и они легко переустанавливаются. Не нужно быть великим хакером, чтобы это показать. Значит инициализация - установка начального состояния. 3. Что такое деинициализация? Инициализация связана с действием на окружение (захват ресурсов) и для нейтрализации данного действия (освобождения ресурсов) производится деинициализация. И 2 и 3 не должны иметь никакого необратимого последействия на окружение иначе ломается RAII. Тут важно согласиться, что сделать то можно всё, но мы никогда ни чего не сможем обсудить исходя из логики абсолютного идиотизма. В океане ужасных возможностей С++ есть разумные пути и говорить имеет смысл только о них. Теперь всё готово. После выделения мы уже имеем объект в не инициализированном состоянии, а после инициализации он готов к работе. Но после деинициализации не исчез объект. Тип и адрес и выделенная память по этому адресу остались прежними. Это тот же объект. Он не готов к работе и мы его повторно инициализируем. Он опять готов к работе. С точке зрения любого программного компонента это тот же объект. Хотите назвать его новым? Но желания должны иметь механизмы реализации. Где вы собираетесь написать номер? Так чтобы оно не стало частью состояния. (переполнение которое чревато появлением двойников пока не рассматриваем, хотя тоже весело). Для того чтобы реализовать эту "новизну" нужно менять язык. В том что есть не поддерживаются такие возможности. То что есть - просто и гениально, тип -абстракция уровня Разрушив простое и адекватное реализации определение мы получили историю о том как оно происходит в самых пространных выражениях. Пришьем её к проверке на самоприсвоение. Возможно для многопоточности и неплохо было бы иметь идентификатор отражающий последовательность порождения, но в языке нет средств для её непосредственного выражения. Есть возможности (и они успешно используются) маркировки объектов номерами, хеширования и пр. Но это уровень состояния объект. Уровень абстракции объект так и остался ограничен типом и адресом и сделать с этим ни чего нельзя. Но тут как и везде. Есть те кто понимает и такие как я. Fulcrum_013, надеюсь, вам хватит терпения перечитать данный пост. Я намеренно сократил материал не касаясь ссылок на "старый" и "новый" объекты. Тут не обсуждались также зависимые объекты, такие как те чье время жизни кем-то управляется. Смартпойнтеры с делетерами и пр. ужасти. Эта часть реальности никак не влияет на базовые понятия языка. В конце концов для осуществления правильной политики всегда можно предложить соответствующий механизм и то, что существующие не будут корректно работать не важно. Уровень библиотек в данном вопросе не тот уровень. То есть, читать не много. Прочтите.
0
|
|||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 02.07.2019, 19:32 | |||
|
Добавлено через 54 секунды
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||||
| 02.07.2019, 19:32 | ||||||||||||||||||||
|
вот так и нужно сразу же делать)
потому что никак не затрагивают строение типа. интересен пункт 8.3. в нём говориться, что если класс содержит не_статическое поле, которое const или ссылка, тогда воскрешать объект нельзя. давай сначала разберемся с чем это связанно.
нельзя изменять объект, который был рожден константным.
может использовать это знание для своих оптимизаций. например, закэшировать значение константы где нибудь в регистре. человек модифицировал ячейку памяти на стеке, но это не сработало, потому что значение бралось с регистра, а не со стека. в случае:
не факт, что это сработает. и каковы в итоге будут последствия. ссылку нельзя перенаправить. ссылку компилятор может реализовать её как type* constи здесь всплывают те же самые проблемы как с изменением константы. какой из этого можно сделать вывод? воскрешать объекты с константными/ссылочными полями можно. но осторожно: значения констант не должно измениться. ладно, возвращаемся к нашим баранам. конечно нельзя быть уверенным в том, что корректный код сегодня останется таковым завтра. тут ты прав. однако, отсутствие гарантий само по себе ещё не делает код некорректным. ты всегда можешь взглянуть на описание класса строки, и убедиться, что класс не содержит ничего противопоказанного. std::string таких полей не содержит, значит и UB нет никакого.
1
|
||||||||||||||||||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 02.07.2019, 19:40 | ||
|
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 02.07.2019, 20:11 | ||
|
Добавлено через 8 минут Точно так же после вызова delete сама память никуда не девается. Просто этот буфер заносится в список доступных для переиспользования и соответсвенно в любой момент времени может быть перезаписан другими данными.
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 02.07.2019, 20:24 | |
|
Именно поэтому и следует отличать объект от буфера памяти в котором он живет.
0
|
|
|
Комп_Оратор)
|
||
| 02.07.2019, 20:30 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||||||||||
| 02.07.2019, 20:36 | ||||||||||||||
|
UB должно быть в случае обращения к полю const int v; и то зависит от того каким образом будет происходить это обращение 21.6.4 Pointer optimization barrier:
если нет барьера std::launder, тогда уже UB... Например тот же std::launder мы можем реализовать самостоятельно как то так:
но проблема будет в том что гарантии даны только для стандартного std::launder, но не любой аналогичной реализации... поэтому думаю будет приблизительно та же проблема если полагаться на просмотр исходников std::string потому что в рамках официального документа чего там находится в std::string мы не знаем
0
|
||||||||||||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 02.07.2019, 20:49 | ||
|
Добавлено через 3 минуты т.е. в первом случае сравнивают валидные ссылки. Вы же пытаетесь распространить это на сравнение валидной ссылки на новый объект со сылкой на деинициализированный. Но само наличие ссылки на деинициализированный объект - UB и такая ссылка не валидна.
0
|
||
|
Комп_Оратор)
|
||
| 02.07.2019, 20:53 | ||
|
До сих пор системе не нужны были религиозные песнопения и танцы. Код в студию.
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 02.07.2019, 21:08 | ||
|
Добавлено через 4 минуты Именно поэтому какие то мансы в сторону определения старый/новый - сапоги в смятку.
0
|
||
|
Комп_Оратор)
|
||
| 02.07.2019, 21:13 | ||
|
Теперь докажите, что "старый" и "новый" реализовано как аутентичная для данных объектов (да-да, - объектов, - они же разные по вашему) информация позволяющая вам реализовать данное определение. Иначе оно пустое с точки зрения программы. ps программа не знает была ли реинициализация и пр. что есть в голове программиста (на деле и программист может этого не знать).
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 02.07.2019, 21:19 | ||
|
0
|
||
| 02.07.2019, 21:19 | |
|
Зачем нужны конструктор и деструктор класса? Дописать конструктор и деструктор для класса Для класса задать конструктор и деструктор Конструктор (деструктор) у класса, не имеющего тип Создание класса с перегрузкой операторов конструктор и деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный 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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|