### Struct

# GObject WeakRef

since: 2.0

#### Description

    struct GWeakRef {
      /* No available fields */
    }

A structure containing a weak reference to a `GObject`.

A `GWeakRef` can either be empty (i.e. point to `NULL`), or point to an object for as long as at least one “strong” reference to that object exists. Before the object’s `GObjectClass`.dispose method is called, every `GWeakRef` associated with becomes empty (i.e. points to `NULL`).

Like `GValue`, `GWeakRef` can be statically allocated, stack- or heap-allocated, or embedded in larger structures.

Unlike `g_object_weak_ref()` and g_object_add_weak_pointer(), this weak reference is thread-safe: converting a weak pointer to a reference is atomic with respect to invalidation of weak pointers to destroyed objects.

If the object’s `GObjectClass`.dispose method results in additional references to the object being held (‘re-referencing’), any `GWeakRefs` taken before it was disposed will continue to point to `NULL`. Any `GWeakRefs` taken during disposal and after re-referencing, or after disposal has returned due to the re-referencing, will continue to point to the object until its refcount goes back to zero, at which point they too will be invalidated.

It is invalid to take a `GWeakRef` on an object during `GObjectClass`.dispose without first having or creating a strong reference to the object.

Available since: 2.0

#### Instance methods

###### g_weak_ref_clear

Frees resources associated with a non-statically-allocated `GWeakRef`. After this call, the `GWeakRef` is left in an undefined state.

since: 2.32

###### g_weak_ref_get

If `weak_ref` is not empty, atomically acquire a strong reference to the object it points to, and return that reference.

since: 2.32

###### g_weak_ref_init

Initialise a non-statically-allocated `GWeakRef`.

since: 2.32

###### g_weak_ref_set

Change the object to which `weak_ref` points, or set it to `NULL`.

since: 2.32