Správně odpověděli ti, co poznali, že funkce getUnMarshaledData() vrací referenci ale za určitých okolností může vrátit referenci na adresu 0. V tom je ta prasárna. Nejhorší je, že tohle pochází od lidí (konkrétního autora neznám), kteří nepatří mezi nováčky a rozhodně znají jak se které konstrukce v C++ překládají. A v tom je asi ten největší průser, protože to napíšou tak, jak je to v danou chvíli nejjednodušší, dyť, stejně to bude fungovat, reference je přece pointer.
Uvedený příklad samozřejmě funguje jak má, tedy funkce opravdu může vrátit NULL-referenci a podmínka zafunguje a vyhodí výjimku
Správně by byly dvě možnosti. První možnost předpokládá, že upravíme rozhraní tak, aby funkce vracela, místo reference, ukazatel. Vůbec sám zastávám pravidlo, že pokud nějaká funkce vrací ukazatel, nebo předává parametry jako ukazatel, musí vždycky druhá strana provést test na NULL (0 - v C++ sice oficiálně NULL není, přesto ho používám kvůli čitelnosti). Pokud se něco předává nebo vrací jako reference, nesmí se předat NULL, tedy vždy musí referencovat platný objekt. Zodpovědnost za správnost dat nese strana, která parametry nebo výsledek poskytuje.
Pokud by nebyla možná změna v rozhraní (například proto, že rozhraní je poděděné), druhým řešením je výjimka uvnitř funkce getUnmarshaledData().
Toho člověka samozřejmě potrestat nemohu, ale zajímal mě jen názor :-)