Právě jsi porušil ten single exit, čímž jsi to dokonale zprasil.
Jestli je podle tebe normální na každý pár alokace a free napsat 4 řádky kódu, který s tím pracuje, pak ano, třetina kódu bude memory management a v takovém případě zůstaň u něčeho s GC, stejně to tím nevytrhneš.
Vždyť jsem odkazoval na Linux:
v1 = priprav_v1();
if (v1 == null)
goto exit_v1;
v2 = priprav_v2();
if (V2 == null)
goto exit_v2;
v3 = priprav_v3();
if (v3 == null)
goto exit_v3;
return v3;
exit_v3:
free(v2);
exit_v2:
free(v1);
exit_v1:
return NULL;
Takhle vypadá kód Linuxu, IMO to moc líp nejde. Máš lepší nápad? Sem s tím.
na unixech by bylo například udělané pomocí __attribute__(cleanup).
Nebo v C++ SmartPointry aka reference counting, který pak třeba zvládnou i to, když v té alokaci pošlu ten objekt někam jinam. Což už je vlastně primitivní GC, které akorát neumí cykly.
Hmm....
Jestli v tom nevidíš rozdíl, tak je jakákoliv diskuse bezpředmětná.
Pokud nepíšu real-time systémy, tak v tom fakt rozdíl není, kromě toho, že to ty cykly neumí....