### Function Macro

# GObject ADD_PRIVATE

since: 2.38

#### Declaration

    #define G_ADD_PRIVATE (
      TypeName
    )

#### Description

A convenience macro to ease adding private data to instances of a new type in the `_C_` section of G_DEFINE_TYPE_WITH_CODE() or G_DEFINE_ABSTRACT_TYPE_WITH_CODE().

For instance:

      typedef struct _MyObject MyObject;
      typedef struct _MyObjectClass MyObjectClass;

      typedef struct {
        gint foo;
        gint bar;
      } MyObjectPrivate;

      G_DEFINE_TYPE_WITH_CODE (MyObject, my_object, G_TYPE_OBJECT,
                               G_ADD_PRIVATE (MyObject))

Will add `MyObjectPrivate` as the private data to any instance of the `MyObject` type.

`G_DEFINE_TYPE_*` macros will automatically create a private function based on the arguments to this macro, which can be used to safely retrieve the private data from an instance of the type; for instance:

      gint
      my_object_get_foo (MyObject *obj)
      {
        MyObjectPrivate *priv = my_object_get_instance_private (obj);

        g_return_val_if_fail (MY_IS_OBJECT (obj), 0);

        return priv->foo;
      }

      void
      my_object_set_bar (MyObject *obj,
                         gint      bar)
      {
        MyObjectPrivate *priv = my_object_get_instance_private (obj);

        g_return_if_fail (MY_IS_OBJECT (obj));

        if (priv->bar != bar)
          priv->bar = bar;
      }

Since GLib 2.72, the returned `MyObjectPrivate` pointer is guaranteed to be aligned to at least the alignment of the largest basic GLib type (typically this is #guint64 or #gdouble). If you need larger alignment for an element in the struct, you should allocate it on the heap (aligned), or arrange for your `MyObjectPrivate` struct to be appropriately padded.

Note that this macro can only be used together with the `G_DEFINE_TYPE_*` macros, since it depends on variable names from those macros.

Also note that private structs added with these macros must have a struct name of the form `TypeNamePrivate`.

It is safe to call the `_get_instance_private` function on `NULL` or invalid objects since it’s only adding an offset to the instance pointer. In that case the returned pointer must not be dereferenced.

Available since: 2.38

This function is not directly available to language bindings.

#### Parameters

`TypeName`

  Type: `-`

  The name of the type in CamelCase.