引用计数智能指针如何避免或处理引用计数器溢出?

时间:2017-05-22 14:42:14

标签: c++ automatic-ref-counting smart-pointers integer-overflow refcounting

在一个天真的引用计数智能指针实现中,引用计数器可能会溢出。在C ++标准库实现中如何避免或处理这种溢出?

1 个答案:

答案 0 :(得分:6)

来自stdlibc ++标题的片段:

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; }

结论:这个特定的实现通过忽略这种可能性来“处理”引用计数器溢出。