Suas observações estão corretas. C ++ é uma fera complicada, e a palavra-chave new
foi usada para distinguir entre algo que precisava de delete
depois e algo que seria automaticamente recuperado. Em Java e C #, eles descartaram a palavra-chave delete
porque o coletor de lixo cuidaria disso para você.
O problema é por que eles mantêm a palavra-chave new
? Sem falar com as pessoas que escreveram a língua, é difícil responder. Meus melhores palpites estão listados abaixo:
- Foi semanticamente correta. Se você estava familiarizado com o C ++, sabia que a palavra-chave
new
cria um objeto no heap. Então, por que mudar o comportamento esperado? - Chama a atenção para o fato de você estar instanciando um objeto em vez de chamar um método. Com as recomendações de estilo de código da Microsoft, os nomes dos métodos começam com letras maiúsculas para que possa haver confusão.
O Ruby está em algum lugar entre Python e Java / C # no uso de new
. Basicamente, você instancia um objeto como este:
f = Foo.new()
Não é uma palavra-chave, é um método estático para a classe. O que isso significa é que, se você quiser um singleton, poderá substituir a implementação padrão de new()
para retornar sempre a mesma instância. Não é necessariamente recomendado, mas é possível.