Se garantiza al trabajo: se evalúan cadenas lógicas AND y OR expresión de izquierda a derecha, y si la primera subexpresión satisface la condición, no se evalúan más subexpresiones.
En su caso, si currentNode
es nulo, nunca será desreferenciado por la segunda subexpresión, por lo que el código es seguro.
Como @jdv señaló, sin embargo, esto se llama evaluación de cortocircuito, no evaluación perezosa. Esta última es una técnica de programación en la que usted, de forma transparente para el cliente, calcula un valor requerido solo la primera vez cuando se necesita concretamente. Un simple ejemplo:
class Example {
SomeClass *theObject = null;
public:
SomeClass *getTheObject() {
if (!theObject) {
theObject = doResourceConsumingCalculation();
}
return theObject;
}
};
Tenga en cuenta que el cliente de Example
no es consciente de los detalles de implementación que theObject
se evalúa con pereza, por lo que son libres de cambiar de ida y vuelta entre la evaluación ansiosos y perezoso sin afectar la interfaz pública de la clase.
(Por supuesto, en el código de producción de bienes, getTheObject
deben implementarse en un archivo separado CPP, y probablemente debería incluir la sincronización, el código de control de errores, etc Esto es sólo un ejemplo simplista :-)
Siempre funcionará, pero podría ser una mala idea. :) Se necesita más contexto para evaluar el código. –
@Karl: ¿qué crees que es malo al respecto? –
** Puede ** estar mal, * según el contexto *, que 'currentNode' es un puntero en primer lugar, o que está permitido que sea nulo, o que la lógica funcione de esta manera, o ... –