C/C++ Ready | Программирование
14.9K subscribers
1.24K photos
69 videos
566 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3QREHc

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Почему std::shared_ptr иногда тормозит даже без потоков?

На вид это просто умный указатель. Кажется, что раз всё в одном потоке — накладных расходов почти нет.

Но у shared_ptr есть счётчик ссылок в control block. Когда ты передаёшь shared_ptr по значению, на входе и выходе функции делается refcount++/refcount-- (обычно атомарно). В горячем коде это превращается в лишнюю работу, хотя логически ты “просто передал указатель”.

Из-за этого можно получить просадку там, где её не ждёшь: циклы, коллбеки, мелкие функции.

Если владение не шарится — лучше unique_ptr или значение. Если шаринг нужен — просто не копируй shared_ptr без причины.

void log(std::shared_ptr<Foo> p); // копия -> refcount++/--

void hot(const std::shared_ptr<Foo>& p) {
for (int i = 0; i < 1'000'000; ++i)
log(p); // лучше: log(const std::shared_ptr<Foo>&)
}


🔥 В hot path не передавай shared_ptr по значению — используй const std::shared_ptr<T>& (или unique_ptr, если шаринга нет).

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥105👍3