[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[no subject]



$ ./weak
created widget, ref count 1
in container, ref count 2
Finalize, ref count 2
destroyed container 1
destroying last ref 1


$ cat weak.cc
#include <stdio.h>
#include <gtk/gtk.h>

static void OnFinalizeDebug(gpointer userdata, GObject* wasptr) {
  printf("Finalize, ref count %d\n", wasptr->ref_count);
}

int main(int argc, char** argv) {
  gtk_init(&argc, &argv);

  GtkWidget* widget = gtk_label_new("abc");
  g_object_ref_sink(widget);
  g_object_weak_ref(G_OBJECT(widget), OnFinalizeDebug, &widget);
  printf("created widget, ref count %d\n", G_OBJECT(widget)->ref_count);

  GtkWidget* box = gtk_vbox_new(FALSE, 0);
  gtk_container_add(GTK_CONTAINER(box), widget);
  printf("in container, ref count %d\n", G_OBJECT(widget)->ref_count);

  gtk_widget_destroy(box);
  printf("destroyed container %d\n", G_OBJECT(widget)->ref_count);

  printf("destroying last ref %d\n", G_OBJECT(widget)->ref_count);
  g_object_unref(widget);

  return 0;
}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]