创建非线程安全的shared_ptr

mpi*_*pe3 11 c++ boost stl

我正在研究一个多线程程序,但有一个UI组件,它广泛使用std :: shared_ptr来管理元素.我可以保证只有一个线程会使用这些shared_ptrs.

有没有办法定义一个不会导致线程安全引用计数开销的shared_ptr?

它可以基于boost :: shared_ptr或std :: shared_ptr.

编辑:感谢您提及intrusive_ptr的答案.我忽略了提到我还需要weak_ptr功能,以便将其排除在外.

更新:我的答案是使用Boost的local_shared_ptr.看看'他漫步'的评论

onq*_*tam 5

Andrei Alexandrescu 在 CppCon 2014 上谈到了实现你自己的单线程共享指针类(带有一些额外的优化)

这里观看视频

还有这里的幻灯片

我真的认为标准或提升应该提供一个模板参数,以便在他们的共享 ptr 中使用原子引用计数......


mpi*_*pe3 1

现在将其添加为已接受的答案。Boost local_shared_ptr 是一个单线程引用计数智能指针,它使用非原子操作来提高速度:

https://www.boost.org/doc/libs/1_65_0/libs/smart_ptr/doc/html/smart_ptr.html#local_shared_ptr