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