Технически, не имеет для выполнения p = NULL
в этой точке кода или явно в любой точке, потому что деструктор освободит умный указатель, как вы заметили.Тем не менее, явное его освобождение дает вам более точный контроль над , когда происходит, что может быть полезно.
В зависимости от требований ISomeInterface
, программы и других факторов, освобождение p
до уничтожения this
может удовлетворять некоторым условиям программы.В частности, если FinalRelease()
вызывается другим методом, а не dtor, то очистка происходит где-то еще и, вероятно, имеет совсем другой триггер.Он также может быть очищен, а затем некоторые ресурсы воссозданы в виде сброса или любого количества других последовательностей.
Чтобы точно выяснить, почему это полезно, при условии, что это не ошибка, вам необходимовернитесь к возможному потоку программ и посмотрите, что происходит.