Как умный указатель подсчета ссылок избегает или обрабатывает переполнения счетчика ссылок?

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

8

Решение

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

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

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]