В С++ следующий код дает ошибку компилятора:
void destruct1 (int * item)
{
item->~int();
}
Этот код почти тот же, я просто набираю int на другой тип и происходит что-то волшебное:
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
Почему работает второй код? Разве int получает деструктор только потому, что он был набран?
В случае, если вам интересно, почему это когда-либо хотелось бы сделать это: это происходит из рефакторинга кода на С++. Мы удаляем стандартную кучу и заменяем ее самодельными пулами. Это требует от нас вызова - нового и деструкторов. Я знаю, что вызов деструкторов для примитивных типов бесполезен, но мы хотим, чтобы они были в коде, если мы позже заменим POD на реальные классы.
Выяснив, что голый int не работает, но набираемые команды были неожиданностью.
Btw - У меня есть решение, которое включает в себя шаблонные функции. Мы просто печатаем внутри шаблона, и все в порядке.