babysitter
Ну это просто очень частая вещь, на ней как-то акцентируют внимание. Вот с make_unique такого прикола само собой нету. Вот его в 11 и не засунули.
Vladislav
да, комбинация make_shared и долгоживущего weak_pointer на него приводит к "утечке" памяти
Vladislav
бонусный вопрос: чем плох код f(shared_ptr<T> (new T(...)), g()), помимо производительности?
Aidar
Это я уже не вижу
Vladislav
Порядок вызова ?
можно подробнее?
babysitter
я возможно слышал у саттера ответ, но могу чушь спороть сори
Dumitru
можно подробнее?
Ну мы не знаем что будет первым Создание указателя или вызов g()
Dumitru
чем это плохо?
Я еще не придумал :D
Aidar
Ну если только ты специально сайд эффекты запилишь
Vladislav
Ну если только ты специально сайд эффекты запилишь
предполагается что код с shared_ptr(new(...)) "хуже" чем f(make_shared<T> (...), g()), плохие сайд-эффекты оба варианта будут портить
babysitter
то есть вопрос звучит как, чем это f(shared_ptr<T> (new T(...)), g()) хуже, чем это f(make_shared<T> (...), g()) кроме производительности ?
Vladislav
да
Andrey
предполагается что код с shared_ptr(new(...)) "хуже" чем f(make_shared<T> (...), g()), плохие сайд-эффекты оба варианта будут портить
фрагментация памяти меньше и меньше вероятность потенциальных утечек из-за исключений на конструкторе
Andrey
это помимо производительности
babysitter
то есть например делается первый хип аллокейшн new T(...) потом выполняется g() он кидает исключение до того как shared_pointer<T> выполнился и мы получаем утечку?
babysitter
а если выкинуть g() например. f(shared_ptr<T> (new T(...)) и ловлю исключение в конструкторе. все плохо?
babysitter
меня просто поплавило внезапно как новичка по идее A a = new A() не должно давать утечку при исключении в конструкторе?
babysitter
разве что деструктор не будет вызван. если плохо написан конструктор будут проблемы
Vladislav
разве что деструктор не будет вызван. если плохо написан конструктор будут проблемы
в идеале, надо стараться по возможности конструкторы делать noexcept
babysitter
ну или обрабатывать исключение прямо в конструкторе и передавать выше
Vladislav
или так, да
babysitter
https://isocpp.org/wiki/faq/exceptions#ctors-can-throw
Vladislav
https://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner
babysitter
да, он там cinder пиарил на этой конференции
babysitter
говорил мол затащим графику в стандарт
Vladislav
говорил мол затащим графику в стандарт
только этого там и не хватало
babysitter
мне понравился его поинт про то, что на его каком-то старинном копе типа коммадора он мог всякие клевые штуки делать в текстовой консоли. цвета изменять там, размер шрифта, а плюсы этого не умеют из коробки.
Vladislav
зачем что-то поддерживать из коробки, если можно сделать в сторонней либе? Стандарт недостаточно раздутый в текущем виде?
Anonymous
консоль - собственной платформы, а не языка. а плюсы рассчитываются на множество платформ, а не на какую то одну конкретную. отсюда прямо следует, что поддержке всякого платформо-специфичного не место в стандарте
Anonymous
*собственность
babysitter
и правда, зачем нам работа с файлами в стандарте, да?
babysitter
файловой системой*
Vladislav
одно дело - фундаментальные концепции, другое - украшательства
Anonymous
то, что имеется по работе с файлами - очень примитивно. с++ не умеет полноценно скопировать файл, например
babysitter
я о том, что будет в с++17. нормальная работа с файловой системой.
babysitter
Так почти никто не умеет из коробки.
с этим я как раз не спорю. не надо этого. я сагрился на вот это > поддержке всякого платформо-специфичного не место в стандарте
Anonymous
не заблуждайтесь, std::filesystem так же примитивна в плане функциональных возможностей
babysitter
а работу с сетью в 17ых завезут?
Крылатый
Ваще, тут некоторые упорки предлагали ваще Cairo включить в стандарт.
Крылатый
Привет, Саттер.
Крылатый
Нет, либу.
babysitter
https://ru.wikipedia.org/wiki/Cairo
Vladislav
а чего бы тогда туда boost всем скопом не воткнуть?)
Anonymous
наверное, потому что буст - полигон для испытаний. зачем втыкать не проверенные решения? а то что прошло испытание практикой - втыкают только в путь
Vladislav
ну вот тому же mpl'ю уже больше 10 лет и он - вполне проверенное решение
Vladislav
просто далеко не любая либа нужна в стандарте
Vladislav
имхо, почти никакая не нужна
Anonymous
решение должно быть не только полезным, но и практичным. что значит быть простым в изготовлении и эксплуатации (ц)Английская королева
Anonymous
это к слову о mpl
Крылатый
Да и вон boost.hana лучше, чем mpl
Anonymous
рефлексия анонсирована на с++20
Vladislav
https://github.com/fffaraz/awesome-cpp
в догонку: https://github.com/rigtorp/awesome-modern-cpp
babysitter
я понимаю, что о новичках мы никогда особо не думаем, но вот приходит новый человек в плюсы и хочет удалить файл. начинает гуглить и узнает, что язык такого не умеет, дергай апи системы. хочешь перенести на свой мак с рабочей винды - пили ифдефы и переписывай кусок кода второй раз
babysitter
это реально демотивирует
Anonymous
remove жеж
Anonymous
ещё из сишного наследния
Anonymous
http://www.cplusplus.com/reference/cstdio/remove/
Vladislav
по такой логике, вообще все либы должны со временем включаться в стандарт
Vladislav
пришел новичок, а json с xml нечем прочитать
Vladislav
демотивирует(
Alexey
не, стоп
babysitter
http://www.cplusplus.com/reference/cstdio/remove/
согласен, плохой пример. каким-то образом я умудрился не слышать о ней.
Alexey
не все. файловая система нормальная быть должна.
Vladislav
а что, не демотивирует?
нет, мотивирует развивать инфраструктуру для third-party библиотек
Anonymous
Алексей, зоопарк файловых систем, вы хотели сказать)
Alexey
тащить буст ради нормальной работы с фс кроссплатформенной, ну бесит же