в библиотеках? Из-за того что стандартный аллокатор медленный? Или это как-то с STL связано
стандартный аллокатор универсальный, прилично работает в любых случаях,но не специализирован на каких-то конкретных. Если разработчик знает, какая стратегия работы с памятью подходит конкретно в его случае, использование правильного аллокатора, по идее, может здорово улучшить производительность. но лично у меня складывается ощущение, что по крайней мере иногда это делают исключительно для утешения своей иллюзии контроля и на самом деле никто не проверял, есть ли прирост или нет
Может, дело еще в том, что кастомный аллокатор может работать как арена аллокатор и не делать системные вызовы каждый раз?
начиная с C++17 в стандартной библиотеке появились полиморфные аллокаторы, где есть стандартная арена - std::pmr::monotonic_buffer_resource а раньше да, приходилось городить велосипеды
Понял, спасибо. И еще вопрос: вот я пишу библиотеку (конкретно - ecs фреймворк для геймдева) на плюсах, стоит ли мне избегать использования сырых указателей как внутри, так и в api для пользователя, работать только с умными указателями? Я понимаю, что семантика умных указателей - это семантика владения, но все же я хочу понять, насколько принято в современном сообществе использование сырых указателей.
невладеющие указатели совершенно незазорно выставлять в API, но в современном коде действительно важно чтобы владеющие имели какой-то свой тип - обычно это как раз-таки unique_ptr, и в довольно редких - shared
Понял. Спасибо большое. weak_ptr не используют?
weak_ptr это по сути ослабление shared_ptr, можно создать только из него и он убирает счетчик ссылок
используют, конечно, как же иначе избегать циклов =) но вообще с shared_ptr лучше быть осторожным. Это хорошо спроектированная и работающая штука, но в большинстве случаев в хорошо спроектированной программе владелец объекта всегда один, то есть по сути shared нужны нечасто. А если их использовать активно - они имеют неприятное свойство расползаться по всему коду, так что потом фиг поймешь где объект должен удалиться, что не есть хорошо для отладки. Плюс это дополнительный оверхед на работу атомарного счетчика.
Понял. Спасибо большое!)
я тут во многом пересказал то, что написано в core guidelines, если еще не читали - рекомендуем =)
Обсуждают сегодня