Если у вас есть круговые структуры данных, например, A указывает на B, а B указывает на A, вы не можете использовать наивные умные указатели для A и B, поскольку тогда объекты будут освобождены только от дополнительной работы. Чтобы освободить память, вы должны вручную очистить умные указатели, что примерно так же плохо, как удаление, от которого умные указатели избавляются.
Вы можете подумать, что это случается не очень часто, но предположим, что у вас есть родительский объект, который имеет умные указатели на несколько дочерних объектов. Где-то по пути кому-то нужно искать родительского элемента для дочернего элемента, поэтому они добавляют интеллектуальный элемент-указатель для дочернего элемента, который указывает на родительский элемент. Молча память больше не освобождается.
Требуется некоторая осторожность. Умные указатели не эквивалентны сборке мусора.