Alexander "SonnySlave"
но мне кажется, что там через кучу ничего не гоняется
Alexander "SonnySlave"
надо глянуть, что там под капотом у cpp_int
MT Radio
Тогда просто создать через new и все?
тут развернуто об этом: https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const/8147213#8147213 спасибо за тему =)
Berkus
а как ему его обеспечить?
через struct private_tag{} если только
Berkus
можно конечно, но надо фактори метод все равно
Berkus
shared_ptr<host> h(host::create()); занафига тут shared? рассказать или сам догадаешься
Berkus
понятно что для синглтона шаред не особо нужен
Berkus
ну может он удалябельный синглтон мутит
Berkus
чудо из чудес
Max
ну может он удалябельный синглтон мутит
Как по другому его в юнит тесты пихнуть?
Max
КОГО?
Синглтон, который я использую
Berkus
Синглтон, который я использую
в юнит тесты точно так же как и в обычную программу, не вижу разницы чот
Max
в юнит тесты точно так же как и в обычную программу, не вижу разницы чот
Ну мне нужно чтоб на каждый тест он заново создавался
Berkus
Ну мне нужно чтоб на каждый тест он заново создавался
не делать синглтоны вообще. никогда
mefest
осталось выпустить новую книгу по паттернам
Pavel
а можно я ещё раз скажу, что синглтон это клёвый способ рулить порядком инициализации статических объектов?
Max
не делать синглтоны вообще. никогда
Удобная штука в некоторых случаях
Anatoly
а можно я ещё раз скажу, что синглтон это клёвый способ рулить порядком инициализации статических объектов?
все объекты должны создаваться в мейне и связи между объектами должны быть установлены там же. "жуликов по телевизору показывают. чем я хуже?" (с)
🐙 Antony
все объекты должны создаваться в мейне и связи между объектами должны быть установлены там же. "жуликов по телевизору показывают. чем я хуже?" (с)
Ну или как минимум - все связанные объекты должны создаваться в одной и той же единице трансляции (не обязательно в main)
Pavel
Pavel
нуда. он зависит от порядка трансляции. поэтому я и за синглтоны в этом случае
🐙 Antony
ловко. но, нет. я в это не верю.
Есть еще одна фишка - константная инициализация. Пометьте конструкторы ваших синглтонных объектов как constexpr (если это возможно, при этом тривиальный деструктор не обязателен) и ваша программа загрузится в память с уже проинициализированными классами
🐙 Antony
следить за порядком кучки SomeSigngleton::get() в main() проще чем за единицами трансляции
Звучит так, будто все эти переменные можно просто объявить в одном cpp файле и не пользоваться singleton
Berkus
нуда. он зависит от порядка трансляции. поэтому я и за синглтоны в этом случае
окей, удачи в удалении и пересоздании этих синглтонов, а также в мульти-инстанциировании твоей либы
Pavel
Звучит так, будто все эти переменные можно просто объявить в одном cpp файле и не пользоваться singleton
нуда. только надо както сделать так, чтобы их никто больше не создавал.
Anatoly
кто сказал что я либы пишу?
а ты один код поддерживаешь?
Pavel
вот всё бы вам в шаблоны затолкать
Pavel
а ты один код поддерживаешь?
нет, но он не становится от этого библиотечным
Pavel
шаблоны рвать вообще полезно. ну, по жизни.
Anatoly
коряво спросил. в одиночку?
Pavel
какая разница?
Berkus
+
Pavel
когда в двоем смотришь на синглтон в приложении, то он превращается в чтото другое?
Berkus
когда школу закончишь, поймешь что синглтоны не нужны
Anton
/vzhuh@FailsBot
Крылатый
Самый смак это покрывать тестами синглтон.
Max
назови хотя бы один?
Например мой. Есть говно-архитектура, хуже чем ее отсутсвие. Тебе нужен обьект для имплементации некоторой функциональности, которую надо было на вчера. На существующей говно-архитектуре тебе его использовать в классе 1 и классе 10, но они связаны по цепочке класс 1 - класс 2 - ... - класс 10. Лучше пихать твой обьект по всей цепочке 1 - 10? Или все же заюзать синглтон?
Max
Знатно я на вентилятор закинул...
Крылатый
Пихать лучше.
Крылатый
Время рефакторинга!
FailsBot
∧_∧ ( ・ω・。)つ━☆・*。 ⊂  ノ    ・゜+. しーJ   °。+ *´¨)          .· ´¸.·*´¨) ¸.·*¨)           (¸.·´ (¸.·'* ☆
Крылатый
кек
🦥Alex Fails
Тут даже интереснее - синглтон - это "адаптер" для глобальной переменной. И эмуляция в тех языках, где только классы
Anatoly
Ильюха, ты наконец дочитал книгу "троллинг для профессионалов"?
Pavel
а если при пропихивании ктонибудь забыл написать & и оно теперь падает непонятно где?
Pavel
вот. наш человек!
Pavel
однако
Крылатый
И никто ничо не забудет. Если не будет как мудак передавать объект, обёрнутый в шаред, по ссылке.
MT Radio
Время рефакторинга!
Капитан Рефакторинг?
Anatoly
надо признать, хороший обед вышел :)
MT Radio
Да!
Точечный багфикс:
MT Radio
Крылатый
Точечный багфикс:
Не, тут рэд пати
Крылатый
MT Radio
там еще на гифке QA подбирался сзади — еле увернулся
Pavel
как 8 байт для raii сишного ресурса дак ой чтото много. а как шаред пойнтеры чуть ли не с мутексами под капотом везде пропихивать так ничего.
MT Radio
явные зависимости лучше неявных для анализа
+ т.ч. имхо тоже лучше передавать
Vsevolod
мутексы у шаред поинтеров?
Vsevolod
там даже атомики-то только при изменении семантики владения
Vsevolod
а обычный const std::shared_ptr<T> & ничего такого не вызывает
Pavel
ну они сделаны потокобезопасные. я незнаю как сейчас, но раньше в многопоточных приложениях частое прокидывание атомиков никчему хорошему не приводило
Anonymous
Добрый день !
Vsevolod
что значит "прокидывание"?
Vsevolod
если ты передаешь зачем-то shared pointer по значению, то ты ССЗБ
Pavel
передача из main() дальше