|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
||||||||||||||||||||||||||
Декоратор и умный указатель19.07.2016, 15:26. Показов 2660. Ответов 8
Метки нет (Все метки)
пускай у нас есть, например, декоратор - для примера возьмем реализацию с википедии, через shared_ptr.
первый вопрос почему что-то такое не работает?
я придумал только добавить конструкторы, принимающие shared_ptr. это, конечно, будет нормально работать, но это как-то странно имхо.
0
|
||||||||||||||||||||||||||
| 19.07.2016, 15:26 | |
|
Ответы с готовыми решениями:
8
Умный указатель Умный указатель Функция, возвращающая умный указатель |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 19.07.2016, 15:55 | ||||||||
у вас возникнет циклическая зависимость между шаред_птр. родитель будет держать ребенка, который будет держать родителя. в результате получите утечки и невозможность грохнуть данные.
1
|
||||||||
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
||||||
| 20.07.2016, 11:03 [ТС] | ||||||
|
забавно, внезапно оказалось, что я вообще неверно понимал принцип работы shared_ptr, и теперь вижу насколько это нелепо. мне думалось, что при каждой инициализации shared_ptr будет проверяться такая магическая глобальная таблица, и если кто-то уже владеет этим указателем, то соответственно use_count увеличится со всеми вытекающими.
GC придумал себе, стыдненько Добавлено через 1 час 22 минуты мне все еще не помешала бы помощь. вот так по идее это должно записываться для unique_ptr. но клиентский код выглядит все равно жутко костыльно, и я не уверен в правильности. как это пишется в реальном мире?
я так понял, что ответов не будет и даже, как мне кажется, понял почему. я пытаюсь слишком буквально перевести гофовский паттерн на более современный язык. паттерн должен быть изначально написан на этом самом современном языке. однако вопрос тут очень серьезный - он скрывает мое непонимание в корне как писать код на С++ вообще. все говорят про абстракции, про то, что программировать нужно на уровне интерфейсов, про то, что сырые указатели - это опасно, про то, что new/delete в клиентском коде не должен существовать, но вот же он, самый что ни на есть классический пример, кусок кода, которому уже непонятно сколько лет, сколько раз он был использован и я просто не могу применить те правила, о которых все столько говорят. а классические фабрики, это же по сути return new Object(); то есть мы возвращаем указатель на выделенную динамическую память - разбирайтесь сами, ловите там на выходе умными указателями или сами руками убивайте. даже в начале изучения плюсов не чувствовал себя таким новичком.
0
|
||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 20.07.2016, 12:40 | |
|
Babysitter, опиши сперва нормальный пример, на котором ты хочешь посмотреть, как пишутся декораторы.
Эти Decorator1, Decorator2... - ну жесть же.
0
|
|
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
||||||
| 20.07.2016, 13:39 [ТС] | ||||||
|
ct0r, лол, так нормально? я думал, что прочитать декоратор с википедии должно быть проще, чем выдумывать дурацкие примеры вроде кофе. напиток, от него кофе. декорируем молоком и шоколадом.
имя параметра в конструкторе - несчастный случай. последствия программирования с помощью замен в текстовом редакторе.
0
|
||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||||||||
| 20.07.2016, 16:14 | |||||||||||
Сообщение было отмечено Babysitter как решение
Решение
Babysitter, то, что ты написал, можно написать так например:
Или так:
2
|
|||||||||||
|
8 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 30
|
|
| 07.11.2016, 11:04 | |
|
Добрый день!
А если понадобится удалить один из декораторов, необходимо удалить весь компонент и заново его сформировать?
0
|
|
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
||
| 07.11.2016, 21:48 [ТС] | ||
|
0
|
||
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
||||||
| 28.12.2016, 16:28 [ТС] | ||||||
|
пы сы
кстати во втором примере тут расставлены классические грабли весчь очевидная, но бывает, что не ожидаешь таких проблем и ищешь долго
0
|
||||||
| 28.12.2016, 16:28 | |
|
Помогаю со студенческими работами здесь
9
Умный указатель и динамический массив Умный указатель для класа Умный указатель своими руками Каст нулевого литерала в умный указатель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|