|
"C with Classes"
|
||||||
Чем заменить указатель05.07.2020, 10:39. Показов 4740. Ответов 48
Метки нет (Все метки)
Чем заменить можно указатель в данном примере. Что бы можно было использовать
p как объект без операции разыменования?
подозреваю, что использовать указатель в данном случае оптимальное и единственное решение, можно было бы использовать ссылку Container & если бы не было функции члена Reset
0
|
||||||
| 05.07.2020, 10:39 | |
|
Ответы с готовыми решениями:
48
Указатель или ссылка на указатель. В чем разница? Чем отличаются указатель на строку и константный указатель на строку? Указатель на указатель, в чем смысл? |
|
"C with Classes"
|
|
| 05.07.2020, 16:34 [ТС] | |
|
0
|
|
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 05.07.2020, 16:40 | |
|
_stanislav, Тут в общем вопрос касательно взаимосвязей в ООП по большому счету. Их два вида - композиция - обьект является составной частью и уничтожается вместе с хозяином, и агрегация -объект является составной частью другого объекта, ваш же объект только пользуется им в случае если такой есть - т.е. помереть может собственной смертью вне зависимости от ваших на него ссылок . Вы тут используете агрегацию. Т.е. по определению должны быть готовы к тому что кто то сторонний может уничтожить объект на который вы ссылаетесь. Разрулить ситуацию можно двумя вариантами - либо действительно weak_ptr (цена - лок при каждом обращении) либо интрузивные двунаправленные указатели (цена - более сложная реализация, в универсальном варианте - оверхед по памяти указателей от 2x, но оповещение о смерти объекта однократное).
Ну либо пересмотреть архитектуру в направление композиции очереди в ваш объект/обращения к очереди через ее хозяина.
0
|
|
|
|
||||||
| 05.07.2020, 16:41 | ||||||
|
Можно к примеру так использовать
Или когда у нас Containe расшаривается между несколькими SomeСlassX и тогда соответственно shared_ptr.
0
|
||||||
|
"C with Classes"
|
||
| 05.07.2020, 17:07 [ТС] | ||
|
Добавлено через 3 минуты Класс который передает в SomeСlass буфер, заинтересован в том что бы SomeСlass обработал этот буфер, зачем ему затирать буфер? Вообщем то класс который передает в SomeСlass буфер только и делает что заполняет этот буфер и передает на обработку в SomeСlassДобавлено через 22 минуты точнее некий класс буферезирует данные которые SomeСlass уже использует через указатель.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 05.07.2020, 17:10 | |||||||||||||
|
уважающая себя, хорошо воспитанная программа не должна делать бессмысленных вещей. если очередь пуста, тогда в принципе ничего удалять из неё не нужно. Кликните здесь для просмотра всего текста
фрагмент из реального продакшен кода.
как у тебя вообще, хотя бы чисто теоретически может возникнуть ситуация, когда ты вынужден опираться на этот буль? вот объясни мне: как это вообще возможно? ты что, пишешь код по принципу: "сначала делаем, и только потом думаем?"
твой класс должен обработать данные, которые внезапно протухли. выполнение задачи невозможно. а от выполнения этой задачи зависит жизнь людей на борту космического корабля. у тебя ошибка в коде из-за которой алгоритм в принципе не функционирует. вот бросил ты эксепшен и что? что дальше? у тебя есть 1 час времени, пока космонафты не задохнулись, и не поджарились. вообще, поражает логика некоторых людей. они думают, что эксепшен - это такая палочка-выручалочка. по волшебству исправит баг, и заставит код успешно отработать. не будет он работать.
0
|
|||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 05.07.2020, 17:39 | ||
|
0
|
||
|
"C with Classes"
|
|
| 05.07.2020, 17:44 [ТС] | |
|
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 05.07.2020, 17:47 | |||
|
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||||||||||
| 05.07.2020, 17:47 | ||||||||||||||
и прежде чем ты назовешь этот код плохим названием скажу что я в этой теме не защищаю какой либо подход а лишь рассматриваю в принципе возможные варианты, их плюсы и минусы но если скажем твой ресурс это некий endpoint, который не спрашивая тебя может закрыть соединение с тобой, то это уже не баг. и вот мы как бы можем проверить а открыто ли еще соединение. если да - то работаем. если нет - то не работаем. и это нормально в рамках нашей задачи.
0
|
||||||||||||||
|
"C with Classes"
|
|||
| 05.07.2020, 17:55 [ТС] | |||
|
Добавлено через 3 минуты zayats80888, для большей универсальности класса SomeClass лучше наверное принимать буфер по значению с перемещением.Добавлено через 3 минуты
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 05.07.2020, 18:24 | ||||
|
такое впечатление, что автору кода совершенно пофигу: будет ли в итоге удален элемент, или нет. всвязи с чем совершенно не понятно: зачем вообще он пытается удалить элемент из очереди? дело в здравом смысле. дело в ответе на вопрос: зачем удаляем? здесь по смыслу - все тоже самое, что и в первом варианте. на моей практике, все случаи работы с очередями сводились к тому, что нужно проверить: если очередь не пустая, тогда извлекаем объект и обратабываем. иначе - пропускаем до следующего раза. ещё раз: сначала выясняем: а нужно ли вообще обрабатывать? и только потом удаляем кандидат-отработанный элемент. удалять просто ради удаления - это какой то бред. попадают под вариант с багом. все без исключения. во всех в этих ситуациях ссылка должна оставаться валидной. иначе алгоритм в принципе не сможет работать.
0
|
||||
|
"C with Classes"
|
||||||
| 05.07.2020, 18:34 [ТС] | ||||||
|
вот объявление класса
SomeClass если кому интересно:
0
|
||||||
|
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
|
||
| 05.07.2020, 18:34 | ||
|
Не по теме: Сам не люблю контейнер через указатель дергать.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||||||||||||
| 05.07.2020, 18:55 | |||||||||||||||
|
она как раз таки возвращает количество удаленных элементов (если 0 - значит ничего не удалили). вот есть такой вариант удаления элемента по ключу (если он есть)
то есть в одном случае мы опираясь на возвращаемое значение метода который отвечает за удаление выдаем репорт а в другом случае мы сначала проверяем есть ли элемент а потом удаляем его и выдаем репорт суть одна и та же просто первый вариант более краток причем в случае std::map::erase(key) у нас 2 варианта: возвращаемое значение либо 0 либо 1 (т.к ключи уникальные) что в принципе как раз таки намекает на bool Добавлено через 3 минуты
1
|
|||||||||||||||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 05.07.2020, 19:04 | |
|
_stanislav, Ну здесь по всей видимости стоит пересмотреть а насколько нужно выдергивать токены по одному. Возможно стоит посмотреть в сторону того, что лексер преобразовывает сразу всю входную строку в строку токенов, потом работает уже с ней. Такая строка токенов и гораздо меньше (ну к примеру для glext.h что то около 75k токенов на мегабайт текста) - т.е. работа с ней будет гораздо быстрее, ну и в результате и с указателем чужим геморроя нет и к кешу более дружелюбно будет однозначно.
0
|
|
|
"C with Classes"
|
|
| 05.07.2020, 19:09 [ТС] | |
|
0
|
|
|
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
|
||||||
| 05.07.2020, 19:31 | ||||||
|
Undisputed, на сколько правильна следующая реализация (оставим пока эффективность, ну и move assignment):
0
|
||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 05.07.2020, 19:35 | |
|
n1b1ru,
Я ещё забыл отметить, что в случае с move будет испорчен исходный объект что может быть неприемлемо в конкретной ситуации. А на сколько правильный код о котором вы спросили уже зависит от конкретной задачи. Это зависит от того что вы пытаетесь получить в конечном счёте.
0
|
|
|
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
|
||
| 05.07.2020, 19:44 | ||
|
Undisputed, задача реализовать композицию.
0
|
||
|
"C with Classes"
|
|
| 05.07.2020, 19:47 [ТС] | |
|
0
|
|
| 05.07.2020, 19:47 | |
|
Помогаю со студенческими работами здесь
40
сма DAEWOO DWD M1029A чем заменить транс, трансформатор в обрыве, чем заменить
Итератор и указатель в чем разница Чем можно заменить заменить toggle() ? Как заменить переменную i на указатель? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|