|
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
|
||||||||||||||||
Shared_ptr и парадигма CoW20.04.2020, 22:54. Показов 3156. Ответов 42
Метки нет (Все метки)
Задача:
Написать простенький аналог shared_ptr применяя парадигму Copy on Write. Проблема: Не могу понять в какой момент дергать функцию создания данных и как правильно это сделать. Как реализовать функции void ensureInitialized() const и void ensureUnique().
0
|
||||||||||||||||
| 20.04.2020, 22:54 | |
|
Ответы с готовыми решениями:
42
Парадигма программирования php Чистота Haskell и функциональная парадигма |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 20.04.2020, 23:08 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
|
||||||
| 20.04.2020, 23:48 [ТС] | ||||||
|
Переделал конструктор копирования.
0
|
||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 20.04.2020, 23:53 | |||||||
Теперь нужно определиться, как именно ты собираешься изменять объект. Неконстантный оператор -> здесь не подходит
1
|
|||||||
|
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
|
|
| 21.04.2020, 00:09 [ТС] | |
|
Объект, который мы передаем в параметре конструктора копирования является константным, получается мы его не меняем. Усвоил, за это большое спасибо!)
Если мы хотим прочитать данные, то вызывается константный оператор ->, Если данные будут изменены, то вызывается неконстантный оператор ->.
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 21.04.2020, 00:15 | ||
|
Я бы сделал метод modify(), который будет возвращать ссылку на объект, если refCounter == 1, иначе создавать копию и возвращать ссылку.
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 21.04.2020, 00:17 | |
|
1
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 21.04.2020, 00:27 | ||
|
Ailuropoda, попробуй - сделай пример и посмотри, когда у тебя будет вызываться константная стрелочка, а когда неконстантная.
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.04.2020, 00:33 | ||
|
Поэтому CoW имеет смысл только для строк и т.д. - т.е. массивов примитивных типов ну или типов с которыми можно общаться только посредством операторов.
0
|
||
|
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
|
||
| 21.04.2020, 00:38 [ТС] | ||
|
1) Дергается функция void DataUser::read() const 2) Внутри нее дергается const Data* DataHandler::operator ->() const Получается, что вызывается константная стрелочка. Или я окончательно запутался...
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 21.04.2020, 00:38 | ||
|
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 21.04.2020, 00:40 | |
|
oleg-m1973, Ну тогда неконстантного -> так же как и неконстантного * вообще не должно быть. Как на меня - лучше четко контролировать где константный доступ где нет,, чем так уродоваться. Но в общем в таких конструкциях смысла около нуля - смысла делать его CoW чтобы вызывать специальный метод нету, это делается для того чтобы именно этим вопросом - помнить где его скопировать надо не заморачиваться. А так проще сделать объекту метод создания копии и не парится.
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 21.04.2020, 00:43 | ||
|
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.04.2020, 00:46 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
|
|
| 21.04.2020, 00:47 [ТС] | |
|
Какая у вас дискуссия по этому поводу...
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 21.04.2020, 00:48 | |
|
0
|
|
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.04.2020, 00:52 | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 21.04.2020, 00:55 | |
|
0
|
|
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.04.2020, 00:59 | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 21.04.2020, 01:02 | |
|
0
|
|
| 21.04.2020, 01:02 | |
|
Помогаю со студенческими работами здесь
20
COW copy on write, класс MyString Описать класс Cow, который наследуется от класcа Animal
Создаем объект cow, у которого есть метод message, который принимает аргументом text и возвращает его
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|