Contents Up Previous Next

Allouer et détruire des objets wxWidgets

En général, les classes dérivées de wxWindow doivent être allouées dynamiquement avec new et détruites avec delete. Si vous détruisez une fenêtre, tous ses enfants et descendants seront automatiquement détruits, vous n'avez donc pas à détruire explicitement ces descendants.

Pour détruire une fenêtre ou une boîte de dialogue, utilisez destroy plutôt que delete pour que le processus de suppression retardée de wxWidgets prenne effet. Ce processus attend un moment de latence (quand tous les messages ont été traités) pour détruire la fenêtre, afin d'éviter les problèmes associés à l'interface qui envoie des événements aux fenêtres détruites.

Ne créez pas de fenêtre sur la pile, car cela interfère avec le processus de destruction retardée.

Si vous décidez d'allouer un tableau d'objets C++ (tels que des wxBitmap) qui peuvent être détruits par wxWidgets, assurez-vous de détruire ce tableau explicitement avant que wxWidgets ait la possibilité de le faire à la fermeture, car l'appel de delete sur les membres d'un tableau causeront desproblèmes de mémoire.

wxColour peut être créé de façon statique: cette classe n'est pas automatiquement détruite. et il n'est pas nécessaire de la partager avec d'autres objets; elle est suffisamment légère pour permettre la création de copies.

Attention lors de la destruction d'objets comme wxPen ou wxBitmap s'ils sont en cours d'utilisation. Windows est particulièrement sensible à cela: assurez-vous de faire des appels tels que wxDC::SetPen(wxNullPen) ou wxDC::SelectObject(wxNullBitmap) avant de supprimer un objet servant à dessinner qui peut être encore utilisé. Un codene faisant pas cela marchera sans doute correctement sur certaines plateformes, et plantera sous Windows.