Быстрый однопоточный std::shared_ptr в GCC

5ea2dff68ca255243c8a0821f36c8e08

Все знают что std: shared_ptr/weak_ptr тормозят, но это не повод от них отказываться и писать свой велосипед или небезопасный код на сырых указателях, ведь ситуацию можно исправить выключив синхронизацию потоков. Код который я вам покажу, работает в GCC и позволяет сконструировать новый shared_ptr без атомарных синхронизаций. Если у вас однопоточное приложение, вы можете подставить этот новый шаред поинтер за место старого для ускорения программы.

#include 

template 
using Shared = std::__shared_ptr;

template 
using Weak = std::__weak_ptr;

template 
Shared new_shared(Args&&... args) { return Shared(new T(args...)); }

Пример как это использовать:

auto player_sptr = new_shared();
Weak player_wptr {player_sptr};

На этом гайд закончился. Плюсы — выглядит так же, как и стдшный шаред поинтер. Насколько теперь это тормозит? Настолько, насколько тормозит доступ к двум ячейкам памяти размером с sizeof (тип_поинтера_в_вашей_ОС).

© Habrahabr.ru