Por que a função de conversão void * () do operador foi adicionada às classes de fluxo C ++?
Existe uma função de conversãooperator void*() const
nas classes de fluxo C ++. para que todos os objetos de fluxo possam ser implicitamente convertidos emvoid*
. Durante a interação com os programadores no SO, eles sugerem que eunão usevoid*
a menos que você tenha um bom motivo para usá-lo.void*
é uma técnica de remoção do tipo segurança e verificação de erros. Portanto, devido à existência dessa função de conversão, o programa a seguir é perfeitamente válido. Esta é uma falha noBiblioteca padrão C ++.
#include <iostream>
int main()
{
delete std::cout;
delete std::cin;
}
Veja demonstração ao vivoaqui.
O programa acima é válido no C ++ 03, mas falha na compilação nos compiladores C ++ 11 e posteriores, porque essa função de conversão é removida. Mas a pergunta é por que ele fazia parte da biblioteca padrão C ++ se é perigoso? Qual era o objetivo de permitir a conversão de objetos de fluxo emvoid*
? Qual é a utilidade disso?