Для написанного мною мультиплатформенного кода на С ++ мне нужен разделяемый указатель.В настоящее время проект не использует надстройку, и его внедрение было бы чрезвычайно сложным или невозможным с точки зрения администрации.Тем не менее, я могу использовать некоторые функции C ++ 11, включая общие указатели.
Существует проблема со стандартными общими указателями, они гарантируют безопасность потоков.Это означает, что на некоторых платформах / компиляторах, таких как GCC (http://tinyurl.com/GCCSharedPtrLockPolicy), атомарные и мьютексы будут использоваться без необходимости, но, по крайней мере, я могу проверить и обойти возникающие при этом проблемы.Тогда для других платформ (http://tinyurl.com/msvscSharedPtr) даже не представляется возможным проверить, какие механизмы безопасности потоков используются.Исходный указатель повышения обеспечивает только самые основные гарантии безопасности потоков (http://tinyurl.com/SharedPtrThreadSafety).
Моя основная проблема заключается в том, что на некоторых платформах Atomics может вызывать дорогостоящие синхронизации между кэш-памятью ЦП, а ненужные мьютексы могут вызыватьзвонки в ОС, которые могут задержаться по не совсем связанным причинам.Этот код будет многопоточным, но у нас есть другие методы синхронизации для перемещения данных между потоками.Потокобезопасный общий указатель просто не нужен или не нужен.
Обычно я бы предпочел провести сравнительный анализ и принять решение, но из-за платформ, на которых он будет работать, а также будет перенесен, я практически не смогу сделатьтак.Мне нужно было бы протестировать на некоторых из менее популярных платформ, где, как правило, существуют менее оптимизированные компиляторы, но у меня сейчас нет такой возможности.
Я попытаюсь сделать попытку получить указатели Boost, но этомаловероятно, каковы мои другие варианты, когда это не удается?В то же время я буду исследовать, пытаясь получить только Shared_ptr от наддува, но я не думаю, что это будет легко.
Я мог бы катиться самостоятельно.Это кажется ужасной идеей, зачем мне заново изобретать что-то такое простое.
Если есть библиотека с таким простым и достаточно либеральным лицензированием, то я мог бы просто скопировать их код shared_ptr и упроститьМой собственный.
Редактировать: Вычеркнуто что-либо из boost, кроме библиотек только заголовка.Я буду исследовать Локи, как предположил один из ответчиков.Если это не удастся и ответы здесь не материализуются, я брошу свои :(.