Я понимаю, что в большинстве случаев мы не должны называть деструктор явно. Однако я видел пример из С++ 11 Standard N3485 Раздел 13.4.5. Аргументы шаблона:
Явный вызов деструктора для объекта, который имеет тип, который является специализацией шаблона класса, которая может явно указывать Шаблон-аргументы. Пример:
template<class T> struct A { ~A(); }; void f(A<int>* p, A<int>* q) { p->A<int>::~A(); // OK: destructor call q->A<int>::~A<int>(); // OK: destructor call }
Мне кажется, что мы можем назвать деструктор явно в этом случае, не могли бы вы объяснить мне, почему? Что означает этот вызов деструктора в этом примере? Почему они разумны?
Другой вопрос:
Какие случаи мы можем назвать деструкторами явно, кроме того, когда мы реализуем placement delete
?
Спасибо.
РЕДАКТИРОВАТЬ: Я нашел из часто задаваемые вопросы по С++, что мы не должны явно ссылаться на деструктор на локальную переменную.