В потоковых классах С++ есть функция преобразования operator void*() const
. так что все объекты потока могут быть неявно преобразованы в void*
. Во время взаимодействия с программистами на SO они предлагают мне не использовать void*
, если у вас нет веских оснований для его использования. void*
- это метод устранения безопасности типов и проверки ошибок. Таким образом, из-за существования этой функции преобразования следующая программа совершенно верна. Это недостаток в стандартной библиотеке С++.
#include <iostream>
int main()
{
delete std::cout;
delete std::cin;
}
Смотрите демо-версию здесь.
Вышеприведенная программа действительна в С++ 03, но не скомпилирована в компиляторах С++ 11 и более поздних версий, поскольку эта функция преобразования удалена. Но вопрос в том, почему он был частью стандартной библиотеки С++, если он опасен? Какова была цель разрешить преобразование объектов потока в void*
? Какая польза от этого?