/* Yecch. */ typedef struct BloatedObject { Foo *foo; SV *foo_ref; Bar *bar; SV *bar_ref; } BloatedObject; void destroy_bloated_object(BloatedObject *obj) { SvREFCNT_dec(obj->foo_ref); SvREFCNT_dec(obj->bar_ref); Safefree(obj); } /* Better. */ typedef struct LeanObject { Foo *foo; Bar *bar; } LeanObject; void destroy_lean_object(LeanObject *obj) { SvREFCNT_dec(obj->foo->perlobj); SvREFCNT_dec(obj->bar->perlobj); Safefree(obj); }