Обычно вы не должны предполагать, что указатель, использованный для старого объекта, не используется повторно для нового объекта.
Иногда вы захотите сделать такое предположение.
Для многопоточного программирует эту ситуацию, когда вы хотите быть уверенным, что указатель не используется повторно, это проблема ABA. Проще говоря, эта проблема возникает, когда вы выполняете сравнение-обмен старого указателя с новым указателем, но вы не можете быть уверены, что старый указатель действительно является старым указателем.
Одно из решений в основном состоит в том, чтобы сохранить старый указатель в течение некоторого времени, это называется указатель опасности .
Другое - полагаться не только на значение указателя, но и на счетчик (хотя счетчик все еще может оборачиваться, вероятность отказа ниже).
Как правило, лучшее решение - не попадать в ситуацию, когда вам нужно предположить, что старый указатель не используется повторно. Проблема ABA является особым случаем, однако, укажите c для блокировки без блокировки, когда избегание может означать полное отсутствие алгоритма без блокировки.