### Struct

# GLib StaticPrivate

#### Description

    struct GStaticPrivate {
      /* No available fields */
    }

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;
      }

#### Instance methods

###### g_static_private_free

Releases all resources allocated to `private_key`.

###### g_static_private_get

Works like `g_private_get()` only for a `GStaticPrivate`.

###### g_static_private_init

Initializes `private_key`. Alternatively you can initialize it with `G_STATIC_PRIVATE_INIT`.

###### g_static_private_set

Sets the pointer keyed to `private_key` for the current thread and the function `notify` to be called with that pointer (`NULL` or non-`NULL`), whenever the pointer is set again or whenever the current thread ends.