Как избежать или обработать переполнения счетчика ссылок smart pointer?

в наивной реализации интеллектуального указателя подсчета ссылок счетчик ссылок может переполниться. Как это переполнение избегается или обрабатывается в реализациях стандартной библиотеки C++?

1 ответов


фрагменты из заголовков 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; }

вывод: эта конкретная реализация "обрабатывает" переполнение счетчика ссылок, игнорируя возможность.