Size: a a a

2020 April 22

CD

Constantine Drozdov in pro.cxx
а она thread safe? не верю
источник

CD

Constantine Drozdov in pro.cxx
Sergey Sobolev
Подскажите плз, необходимо реализовать версионный контейнер типа std::map, со следующим функционалом:
1) есть писатель, который наполняет данными этот контейнер
2) есть несколько читателей, которые могут прийти в любой момент и попросить снэпшот данных (все участники работают в своем потоке)
самый тривиальный способ - это просто копировать целиком всю мапу писателя читателю, но это как раз и стало поводом написать нечто более эффективное. Гугл ничего подобного не выдает, кто-нибудь сталкивался с такой задачей? Кажется, что это довольно частый кейз, и скорее всего такое уже кем-то решалось, интересно было бы посмотреть на подход
Я полагаю, что никто никогда не делает многопоточные версионные контейнеры, транзакционность реализуется другими средствами
источник

SS

Sergey Sobolev in pro.cxx
да, похоже на то, спасибо большое, буду разбираться
источник
2020 April 23

A

Alex in pro.cxx
Почему если я объявляю копи конструктор ... noexcept = default этот код не компилируется, а если я тот же самый конструктор определю руками - компилируется?

https://godbolt.org/z/v6Cgn5
источник

SE

Stanislav Ershov in pro.cxx
Alex
Почему если я объявляю копи конструктор ... noexcept = default этот код не компилируется, а если я тот же самый конструктор определю руками - компилируется?

https://godbolt.org/z/v6Cgn5
так почитай какая ошибка
источник

A

Alex in pro.cxx
ошибка deleted constructor, так где ж он deleted
источник

АК

Александр Караев in pro.cxx
Alex
Почему если я объявляю копи конструктор ... noexcept = default этот код не компилируется, а если я тот же самый конструктор определю руками - компилируется?

https://godbolt.org/z/v6Cgn5
О, я сталкивался с таким.
У тебя std::string на копировании может исключение бросить, поэтому дефолтное копирование твоего`F` не noexcept
источник

A

Alex in pro.cxx
а-а-а, дело именно в стринг версии! Вот этот момент я не просёк, спс
источник

A

Alex in pro.cxx
чёртовы исключения, гореть бы им в огне
источник

АК

Александр Караев in pro.cxx
я недавно наталкивался на баг, но никак не могу сейчас его на годболте воспроизвести
суть была в том, что компилятор отказывался генерировать noexcept = default мув-конструктор, так как там было что-то про вектор, который не мог вычислить noexcept из-за разрешения incomplete типов..

короче, я не помню. может кто-то меня поймёт и расскажет. в частности я точно помню, что там был логический парадокс, из-за которого я бомбанул
источник

AD

Andrey Davydov in pro.cxx
В C++20, кстати это поменяется, компилятор начнёт верить написанной программистом exception specification (так же как и для обычной не defaulted функции).
источник

A

Alex in pro.cxx
а с точки зрения сгенерированного кода или даже AST дерева есть какая-то разница между моим не-дефолтным конструктором и = default?
источник

A

Alex in pro.cxx
при условии, что семантически мой делает то же самое - просто вызывает соответствующий конструктор единственного члена структуры
источник

AD

Andrey Davydov in pro.cxx
Alex
а с точки зрения сгенерированного кода или даже AST дерева есть какая-то разница между моим не-дефолтным конструктором и = default?
для нетривиального — нет
источник

m

magras in pro.cxx
Alex
а с точки зрения сгенерированного кода или даже AST дерева есть какая-то разница между моим не-дефолтным конструктором и = default?
Кажется, разница в том, что у твоего класса появляется кастомный конструткор. Это повлияет на трейты, а через них может заафектить код работающий с твоим классом.
источник

A

Alex in pro.cxx
а тривиальный перестаёт быть тривиальным, да?
источник

A

Alex in pro.cxx
и это может в каком-то очень умном шаблонном коде влиять на то, как используется объект моего класса?
источник

A

Alex in pro.cxx
тогда может быть лучше не выпендриваться и убрать noexcept, чем определять вручную?
источник

AD

Andrey Davydov in pro.cxx
Alex
а тривиальный перестаёт быть тривиальным, да?
да
источник

AD

Andrey Davydov in pro.cxx
Alex
тогда может быть лучше не выпендриваться и убрать noexcept, чем определять вручную?
это всегда хорошая идея, компилятор сам его посчитает
источник