1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
||||||
1 | ||||||
Член указатель09.07.2024, 23:01. Показов 1697. Ответов 52
Метки нет (Все метки)
Добрый день
Очень простая конструкция
Как лучше? Слышал такое 1) "Лучше иметь m_data членом, а не указателем". Это владение, а оно не всегда нужно/допустимо. В большинстве случаев SomeObject просто использует SomeData для чтения/записи, но SomeData остается вполне самостоятельным объектом что может существовать и без SomeObject 2) "Необходимо использовать вумный указатель! Вообще "голые" указатели (как в примере выше) - это зло, их быть вообще не должно!" А Вы что предложите? Спасибо
0
|
09.07.2024, 23:01 | |
Ответы с готовыми решениями:
52
Функция-член принимает указатель на функцию-член Не могу создать указатель на функцию. ошибка: нестандартный синтаксис; используйте "&", чтобы создать указатель на член Указатель на функцию-член Указатель на фунцкию-член |
Модератор
|
|
09.07.2024, 23:37 | 2 |
Они вроде как средство от ручного управления памятью, а проблем валидности не решают. В них тоже не может быть значения...
Хотя можно вместо указателя опционал, тогда можно избавиться от ручного управления памятью (объект будет на стэке по сути), но так же придется проверять валидность
0
|
фрилансер
5846 / 5376 / 1103
Регистрация: 11.10.2019
Сообщений: 14,367
|
|
10.07.2024, 09:01 | 3 |
Igor3D, мне кажется, в данном случае подойдёт
std::shared_ptr
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
10.07.2024, 19:33 [ТС] | 4 |
alecss131, Алексей1153, спасибо за ответы, но не могли бы Вы пояснить/показать подробнее? А то все намеками
0
|
фрилансер
5846 / 5376 / 1103
Регистрация: 11.10.2019
Сообщений: 14,367
|
|
10.07.2024, 19:59 | 5 |
Igor3D, а что именно будет происходить с этим указателем и с его обёрткой ?
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
11.07.2024, 14:08 [ТС] | 6 |
Пример. Есть 100 SomeObject, возможно некоторые из них ссылаются на некоторые SomeData. Теперь нужно удалить один из SomeData. Ясно что указатель на него, хранимый SomeObject, становится невалидным. Придется найти всеx "клиентов" использующих удаляемый SomeData и обнулить в них указатели. Этот "поиск клиентов" выглядит трудоемко и коряво. Как его избежать? Напомню что на валидности указателя проблемы не кончаются
0
|
фрилансер
5846 / 5376 / 1103
Регистрация: 11.10.2019
Сообщений: 14,367
|
||||||
11.07.2024, 14:31 | 7 | |||||
Igor3D,
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
||||||
11.07.2024, 19:43 [ТС] | 8 | |||||
Алексей1153, если Вы хотели показать связку shared + weak, то лучше так
0
|
фрилансер
5846 / 5376 / 1103
Регистрация: 11.10.2019
Сообщений: 14,367
|
|
11.07.2024, 19:52 | 9 |
это обеспечивается инкапсуляцией данных внутри SomeObject. Метод, меняющий данные, сохраняет изменения в журнал, затем меняет данные
ни про какие оживающие ссылки и указатели тут думать не приходится. Только адресация в виде (например) целочисленных идентификаторов
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
11.07.2024, 19:56 [ТС] | 10 |
А как выскочить на SomeObject (и на какой) если удаляется SomeData?
Не по теме: Не спешите с ответами, никто не гонит, обо всем успеем поговорить :)
0
|
фрилансер
5846 / 5376 / 1103
Регистрация: 11.10.2019
Сообщений: 14,367
|
|
11.07.2024, 20:37 | 11 |
Igor3D, я же не знаю, что происходит в программе.
Нужно организовать всю структуру данных так, чтобы о любом внесении любых изменений был строгий отчёт в любом виде - лог, журнал, полная история изменений и тому подобное. Всё это нужно запланировать и спроектировать. Само по себе это не заработает Добавлено через 4 минуты например, в простых игрушках я делал такой журнал максимально просто - сохранение всего игрового поля в стеке do/undo. Такое же получалось проворачивать в рисовалках схем, ОЗУ не жмёт, в json всё сохранял. но когда такое невозможно (сильно жрётся озу или по иным причинам), сохраняются отдельные действия (как в МС Ворд) - ввод строки, ввод буквы, назначение форматирования, удаление и так далее. Этот журнал изменений откатывается и накатывается при необходимости. Случай с полным сохранением всех данных позволяет лучше избежать ошибок. Случай с журналом более сложный, накосячить там легче
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
12.07.2024, 18:36 [ТС] | 12 |
Вот нужно удалить SomeData обеспечив undo. Как писать undo - большая тема, но по-любому нужно иметь/знать объекты которые изменились (и обычно что изменилось). В данном случае это не только удаляемый SomeData, но и все SomeObject что ссылаются на него. Вот я и спрашиваю: а как искать этих "клиентов"? Это в простом примере выше с одной переменной все ясно, а в общем случае?
Заметим что использование вумных указателей никак не решает эту проблему, максимум можно получить счетчик "слабых" ссылок. А вот забот "вумничание" уже добавляет, удаление шареного SomeData не гарантируется. Также интересно как это с точки зрения др языков? Может это лишь заботы "низкоуровневых" плюсов где нет "сборщика мусора" (мечты поэта)? Что скажет прогрессивное ФП?
0
|
Модератор
3077 / 2226 / 462
Регистрация: 26.03.2015
Сообщений: 8,626
|
|
13.07.2024, 01:08 | 13 |
Зависит от физического смысла SomeObject и SomeData.
SomeData - это объект или значение? Если объект, то как относятся друг к другу SomeObject и SomeData? Кто создаёт SomeObject и SomeData? Может ли меняться SomeData за время жизни SomeObject? Если может, то как?
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
13.07.2024, 01:43 [ТС] | 14 |
Смысл может быть очень всяким. Напр SomeObject и SomeData могут быть объектами одного типа, это стандартная техника управления множественными объектами. Напр источников света в сцене может быть довольно много (десятки и сотни). Менять параметры каждого утомительно для юзера. Поэтому он назначает один из источников "мастером" и много источников "слейвами", что будут юзать установки мастера вместо собственных. Создание/удаление обычно независимо. Стандартное отношение парент-чайлд тоже в теме, но в общем случае никаких др отношений между SomeObject и SomeData может и не быть и никто из них другим не владеет. И да, SomeData может меняться за время жизни SomeObject, который, возможно, обязан на это реагировать.
0
|
Модератор
3077 / 2226 / 462
Регистрация: 26.03.2015
Сообщений: 8,626
|
|
13.07.2024, 02:53 | 15 |
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
13.07.2024, 03:06 [ТС] | 16 |
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
13.07.2024, 10:20 | 17 |
Не понимаю, что нужно искать. do/undo обычно реализуется через паттерн "команда". Команда(или "исполнитель") знает, как применить действие, как сериализовать и отменить, а организованны они в виде стека.
undo не может просто взять и удалить SomeData, т.к. не могло быть просто команды "добавить SomeData", тем более добавление не могло быть после появления ссылок у объектов SomeObject на него. Сначала отменяются команды, которые создали ссылки и только потом команда, создавшая SomeData. Короче, вы высасываете проблему из пальца. А если нет, то приведите наиболее приближенный пример(модель, реализованную в коде), демонстрирующий вашу проблему.
0
|
1873 / 770 / 108
Регистрация: 01.10.2012
Сообщений: 4,180
|
|
13.07.2024, 17:33 [ТС] | 18 |
Юзер указал что источник Light2 будет использовать параметры Light1 (см детали выше), сохранил изменения и продолжает работу. Через недельку он пришел к выводу что Light1 не нужен и удаляет его. Какие тут "команды"? Этот поезд давно ушел
Не по теме: Антипаттерны гораздо полезнее паттернов :)
0
|
фрилансер
5846 / 5376 / 1103
Регистрация: 11.10.2019
Сообщений: 14,367
|
|
13.07.2024, 17:36 | 19 |
Igor3D, либо запретить удаление, если на объект есть ссылка, либо Light2 будет использовать дефолты
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
13.07.2024, 17:40 | 20 |
А каким боком вы сюда undo приплели?
Добавлено через 2 минуты Архитектурно напрашивается, что параметры это ресурс, т.е. подсчет ссылок актуален.
0
|
13.07.2024, 17:40 | |
13.07.2024, 17:40 | |
Помогаю со студенческими работами здесь
20
Указатель на функцию член Указатель на функцию-член Указатель на функцию-член Указатель на функцию-член класс Статический член указатель на класс Указатель на функцию-член класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |