On 7/31/19 9:04 AM, Alex Bennée wrote: > > Daniel P. Berrangé <berra...@redhat.com> writes: > >> Both GCC and CLang support a C extension attribute((cleanup)) which >> allows you to define a function that is invoked when a stack variable >> exits scope. This typically used to free the memory allocated to it, >> though you're not restricted to this. For example it could be used to >> unlock a mutex. > <snip> >> >> GOOD: >> g_autofree char *wibble = g_strdup("wibble") >> ... >> return g_steal_pointer(wibble); >> >> g_steal_pointer is an inline function which simply copies >> the pointer to a new variable, and sets the original variable >> to NULL, thus avoiding cleanup. > > Surely this is a particular use case where you wouldn't use g_autofree > to declare the variable as you intending to return it to the outer scope?
Actually, it's still quite useful if you have intermediate returns: g_autofree char *wibble = NULL; if (something) return NULL; wibble = g_strdup("wibble"); if (something_else) return NULL; return g_steal_pointer(wibble); -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature