### Function

# GObject Closure new_simple

#### Declaration

    GClosure*
    g_closure_new_simple (
      guint sizeof_closure,
      gpointer data
    )

#### Description

Allocates a struct of the given size and initializes the initial part as a `GClosure`.

This function is mainly useful when implementing new types of closures:

    typedef struct _MyClosure MyClosure;
    struct _MyClosure
    {
      GClosure closure;
      // extra data goes here
    };

    static void
    my_closure_finalize (gpointer  notify_data,
                         GClosure *closure)
    {
      MyClosure *my_closure = (MyClosure *)closure;

      // free extra data here
    }

    MyClosure *my_closure_new (gpointer data)
    {
      GClosure *closure;
      MyClosure *my_closure;

      closure = g_closure_new_simple (sizeof (MyClosure), data);
      my_closure = (MyClosure *) closure;

      // initialize extra data here

      g_closure_add_finalize_notifier (closure, notify_data,
                                       my_closure_finalize);
      return my_closure;
    }

#### Parameters

`sizeof_closure`

  Type: `guint`

  The size of the structure to allocate, must be at least `sizeof (GClosure)`

`data`

  Type: `gpointer`

  Data to store in the `data` field of the newly allocated `GClosure`.

  The argument can be `NULL`.
  The data is owned by the caller of the function.

#### Return value

Type: `GClosure`

A floating reference to a new `GClosure`.

The data is owned by the called function.