La parola chiave new
in lingue come Java, Javascript e C # crea una nuova istanza di una classe.
Questa sintassi sembra essere stata ereditata da C ++, dove new
è usato specificamente per allocare una nuova istanza di una classe sull'heap e restituire un puntatore alla nuova istanza. In C ++, questo non è l'unico modo per costruire un oggetto. Puoi anche costruire un oggetto sullo stack, senza usare new
- e infatti, questo modo di costruire oggetti è molto più comune in C ++.
Quindi, provenendo da uno sfondo C ++, la parola chiave new
in lingue come Java, Javascript e C # mi è sembrata naturale e ovvia. Poi ho iniziato a imparare Python, che non ha la parola chiave new
. In Python, un'istanza è costruita semplicemente chiamando il costruttore, come:
f = Foo()
All'inizio questo mi è sembrato un po 'strano, fino a quando non mi è venuto in mente che non c'è motivo per Python di avere new
, perché tutto è un oggetto quindi non c'è bisogno di disambiguare tra le varie sintassi del costruttore.
Ma poi ho pensato - qual è davvero il punto di new
in Java? Perché dovremmo dire Object o = new Object();
? Perché non solo Object o = Object();
? In C ++ c'è sicuramente bisogno di new
, dal momento che dobbiamo distinguere tra allocare sull'heap e allocare sullo stack, ma in Java tutti gli oggetti sono costruiti sull'heap, quindi perché avere anche la parola chiave new
? La stessa domanda potrebbe essere richiesta per Javascript. In C #, a cui sono molto meno familiare, penso che new
possa avere qualche scopo in termini di distinzione tra tipi di oggetti e tipi di valore, ma non ne sono sicuro.
Indipendentemente da ciò, mi sembra che molte lingue che sono venute dopo C ++ semplicemente "ereditassero" la parola chiave new
- senza realmente averne bisogno. È quasi come una parola chiave residua . Non sembra che ce ne sia bisogno per nessuna ragione, eppure è lì.
Domanda: ho ragione su questo? O c'è una ragione convincente che new
deve essere in C ++ - linguaggi di gestione della memoria ispirati come Java, Javascript e C # ma non Python?