Existen ciertas diferencias en ciertas situaciones. new(T)
, como su nombre lo indica, devuelve una, bien, nueva instancia de tipo T, mientras que var b T
es una sola instancia, una vez y para siempre (err, en realidad hasta el final de su vida == fuera del alcance, no alcanzable ...) .
consideran este bucle
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)
}
En el último caso, si foo
por ejemplo almacena su arg
en algún recipiente, los resultados en 10 casos de bar
existente mientras el primer caso con solo uno - en la variable b
.
Otra diferencia está en el rendimiento. La variable b
sería una variable global totalmente estática o, por lo general, se ubicará en un desplazamiento estáticamente conocido en algún registro de invocación de función/método (un nombre elegante para generalmente un marco de pila). new
OTOH, si no está optimizado por el compilador, es una llamada al asignador de memoria. Dicha llamada costará un tiempo no nulo. Si se realiza en un bucle y no es realmente necesario, puede provocar una desaceleración notable de alguna ruta de código.
No lo creo. Esta pregunta específicamente pregunta sobre el resultado de '& Variable' vs' new (Type) 'cuando se pasa a una función de toma de tipo de puntero. 10990174 no pregunta ni responde eso. – zzzz