|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
reference counter в shared_ptr19.08.2020, 13:20. Показов 2544. Ответов 21
Метки нет (Все метки)
Как реализован reference counter в shared_ptr? Я так понимаю там должен быть целый клас, а в самом shared_ptr должен хранится указатель на переменную класа ref_count? Или есть другие варинаты как реализовать это?
0
|
|
| 19.08.2020, 13:20 | |
|
Ответы с готовыми решениями:
21
|
|
Любитель чаепитий
|
|
| 19.08.2020, 13:24 | |
Сообщение было отмечено Vanconts как решение
Решение
0
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
||||||
| 19.08.2020, 13:59 [ТС] | ||||||
|
GbaLog-,
Кликните здесь для просмотра всего текста
зачем в примере приведенном создается интерфейс(абстрактный клас)? Почему нельзя без него обойтись?
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.08.2020, 14:06 | |
|
Vanconts, можно обойтись, но по сути получится тоже самое, но менее выразительно.
Абстрактный класс используется, чтобы реализовать поддержку type erasure (ссылка). Потому что далее у нас не фигурируют, "стираются", типы, заданные в конструкторе - Deleter и U.
2
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 19.08.2020, 14:17 [ТС] | |
|
DrOffset, впервые встречаю type ensure, можно маленькое описание для чайников?) либо опять таки литературу где можно эб этом почитать (желательно не на 1000 страниц)
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.08.2020, 14:19 | |
|
Vanconts, описания по ссылке на вики не достаточно?
0
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 19.08.2020, 14:27 [ТС] | |
|
DrOffset, не достаточно
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.08.2020, 14:28 | |
|
Vanconts, если вкратце, то это переход от статического полиморфизма к динамическому.
На русском есть описание в книге "Шаблоны C++. Справочник разработчика" (2 издание). Глава 22, параграф 22.4. Все 800 страниц книги читать не обязательно (хотя конкретно эта книга должна быть в библиотеке каждого плюсовика)
1
|
|
| 19.08.2020, 14:44 | |
|
Не по теме: Кстати что за именование такое "aux" я так понимаю сокращение, кто знает как полностью и смысл?
0
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 19.08.2020, 14:47 [ТС] | |
|
DrOffset, а что такое собственно статический и динамический полиморфизм?)
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.08.2020, 14:49 | |
|
0
|
|
| 19.08.2020, 14:52 | |
|
0
|
|
|
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
|
|
| 19.08.2020, 14:55 | |
|
0
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
||
| 19.08.2020, 15:27 [ТС] | ||
|
DrOffset, думаю что да)
Добавлено через 3 минуты DrOffset, я так понимаю речь идет об этом?
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.08.2020, 15:56 | |
|
Vanconts, об этом, но не совсем. Это описание процесса, но не сути.
Немного на пальцах, не претендуя на непогрешимую точность формулировок (это дисклеймер для тех, кто любит к ним (формулировкам) придираться): Динамический полиморфизм в С++ - это полиморфизм объектов. На самом деле все точные типы при таком полиморфизме известны, в С++ вообще не может быть так, чтобы типы были неизвестны. Но вот именно какого типа будет объект, скрывающийся за ссылкой или указателем, действительно может быть намеренно неизвестно на этапе компиляции. Статический полиморфизм в С++ - это разновидность параметрического полиморфизма, т.к. язык С++ статически типизирован, то по сути это полиморфизм типов. Как понятно из названия, существует он только на этапе компиляции. Динамического полиморфизма типов в С++ не бывает, потому что нет динамических типов. Зато в С++ бывает динамический полиморфизм объектов. Так вот, идиома type erasure по сути реализует полиморфизм типов через динамический полиморфизм. Делая из него динамический полиморфизм типов. А надо это затем, что Deleter и U - это изменяющиеся сущности, зависящие от динамического контекста, который задает (может задавать) программист, когда пишет программу. Поэтому в типе shared_ptr их невозможно сохранить, также как при обычном полиморфизме вы не сохраняете в указателе или ссылке на базовый\абстрактный класс тип наследников.
1
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|||
| 19.08.2020, 16:08 [ТС] | |||
|
DrOffset,
Так?
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 19.08.2020, 16:11 | |
|
1
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 19.08.2020, 22:41 [ТС] | |
|
DrOffset, я правильно понял суть? Делаем мы это для того чтобы хранить объект известного нам типа (в данном случае aux) , а во время выполнения уже будет определено то что хранит этот тип( в данном случае тип указателя и функции удаления) , а сделать без абстрактного класса не получится тк в данном случае требовалось бы указать типы указателя и функции напрямую ( к примеру auximlp<t1,t2> var) тоесть этот класс aux что-то по типу обертки созданной для того чтобы можно было хранить его , а он в свою очередь что угодно?
И насколько я понял здесь используется и динамический полиморфизм и статический? Добавлено через 3 часа 41 минуту DrOffset, а зачем вообще пихать counter в ту структуру? Нельзя разве создать указатель в самом классе counter и в конструкторе выделять память лдя counter ?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 19.08.2020, 23:00 | ||
|
Vanconts, в общих чертах - правильно.
Просто вам уже показали, так сказать, продвинутую реализацию, где помимо счетчика хранится еще и Deleter и оригинальный тип который был передан в конструкторе. Позволяя таким образом вызывать у хранимого объекта правильный деструктор, даже если он не был объявлен виртуальным.
2
|
||
|
"C with Classes"
|
|
| 17.12.2020, 22:38 | |
|
0
|
|
| 17.12.2020, 22:38 | |
|
Помогаю со студенческими работами здесь
20
Наследование от shared_ptr Unique() в shared_ptr Shared_ptr и TButton
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|