引用计数智能指针如何避免或处理引用计数器溢出?
How do reference-counting smart pointer's avoid or handle reference-counter overflows?
在简单的引用计数智能指针实现中,引用计数器可能会溢出。在 C++ 标准库实现中如何避免或处理这种溢出?
来自 stdlibc++ 的片段 headers:
typedef int _Atomic_word;
class _Sp_counted_base
/*snip*/
_Atomic_word _M_use_count;
/*snip*/
_M_weak_add_ref()
{ __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
/*snip*/
__atomic_add_dispatch(/*snip*/)
{
/*snip*/
__atomic_add_single(/*snip*/);
/*snip*/
}
__atomic_add_single(/*snip*/)
{ *__mem += __val; }
结论:这个特定的实现 "handles" reference-counter 忽略了可能性而溢出。
在简单的引用计数智能指针实现中,引用计数器可能会溢出。在 C++ 标准库实现中如何避免或处理这种溢出?
来自 stdlibc++ 的片段 headers:
typedef int _Atomic_word;
class _Sp_counted_base
/*snip*/
_Atomic_word _M_use_count;
/*snip*/
_M_weak_add_ref()
{ __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
/*snip*/
__atomic_add_dispatch(/*snip*/)
{
/*snip*/
__atomic_add_single(/*snip*/);
/*snip*/
}
__atomic_add_single(/*snip*/)
{ *__mem += __val; }
结论:这个特定的实现 "handles" reference-counter 忽略了可能性而溢出。