|
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
|
||||||
Можно ли Конструктор и Деструктор вызывать как метод класса?29.06.2019, 12:03. Показов 22074. Ответов 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 | |
|
Зачем нужны конструктор и деструктор класса? Дописать конструктор и деструктор для класса Для класса задать конструктор и деструктор Конструктор (деструктор) у класса, не имеющего тип Создание класса с перегрузкой операторов конструктор и деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
|
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й колонке просто выдумал. .
Это. . .
|