単純な参照カウント スマート ポインターの実装では、参照カウンターがオーバーフローする可能性がありました。このオーバーフローは、C++ 標準ライブラリの実装でどのように回避または処理されますか?
1 に答える
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; }
結論: この特定の実装は、可能性を無視することによって、参照カウンターのオーバーフローを「処理」します。
于 2017-05-22T15:09:48.230 に答える