Ci sono differenze in alcune situazioni. new(T)
, come suggerisce il nome, restituisce una, beh, nuova istanza di tipo T, mentre var b T
è una singola istanza, una volta e per sempre (err, in realtà fino alla fine della sua durata == esce dall'ambito, non raggiungibile ...) .
considerare questo ciclo
var b bar
for i := 0; i < 10; i++ {
foo(&b)
}
vs
var b *bar
for i := 0; i < 10; i++ {
b = new(b)
foo(b)
}
In quest'ultimo caso, se foo
ad esempio memorizza i suoi arg
in qualche contenitore, i risultati in 10 casi di bar
esistente, mentre il primo caso con solo uno - nella variabile b
.
Un'altra differenza è nella prestazione. La variabile b
potrebbe essere una variabile globale completamente statica o in genere si troverà in un offset noto staticamente in alcuni record di chiamata funzione/metodo (un nome di fantasia per un frame di solito). new
OTOH, se non ottimizzato dal compilatore, è una chiamata allocatore di memoria. Tale chiamata avrà un costo diverso da zero. Se fatto in un ciclo e non effettivamente necessario, allora può rallentare notevolmente alcuni percorsi del codice.
Non penso. Questa domanda richiede specificamente il risultato di '& Variable' vs' new (Type) 'quando viene passato a un tipo di puntatore che assume la funzione. 10990174 non chiede né risponde. – zzzz