GStaticPrivate

A #GStaticPrivate works almost like a #GPrivate, but it has one significant advantage. It doesn't need to be created at run-time like a #GPrivate, but can be defined at compile-time. This is similar to the difference between #GMutex and #GStaticMutex.

Now look at our give_me_next_number() example with #GStaticPrivate:

int
give_me_next_number ()
{
  static GStaticPrivate current_number_key = G_STATIC_PRIVATE_INIT;
  int *current_number = g_static_private_get (&current_number_key);

  if (!current_number)
    {
      current_number = g_new (int, 1);
      *current_number = 0;
      g_static_private_set (&current_number_key, current_number, g_free);
    }

  *current_number = calc_next_number (*current_number);

  return *current_number;
}
struct GStaticPrivate {}

Members

Variables

index
uint index;