Как избежать или обработать переполнения счетчика ссылок 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; }
вывод: эта конкретная реализация "обрабатывает" переполнение счетчика ссылок, игнорируя возможность.