@@ -164,6 +164,11 @@ - (void)menuDidClose:(NSMenu *)menu {
164164 }
165165
166166 ~Impl () {
167+ // First, clean up submenu reference
168+ if (submenu_) {
169+ submenu_.reset ();
170+ }
171+
167172 if (target_) {
168173 // Remove target and action to prevent callbacks after destruction
169174 [ns_menu_item_ setTarget: nil ];
@@ -221,8 +226,11 @@ - (void)menuDidClose:(NSMenu *)menu {
221226}
222227
223228MenuItem::~MenuItem () {
224- // Unregister from event registry
225- g_menu_item_registry.erase (id );
229+ // Safely remove from global registry
230+ auto it = g_menu_item_registry.find (id );
231+ if (it != g_menu_item_registry.end ()) {
232+ g_menu_item_registry.erase (it);
233+ }
226234}
227235
228236MenuItemType MenuItem::GetType () const {
@@ -445,6 +453,9 @@ - (void)menuDidClose:(NSMenu *)menu {
445453 }
446454
447455 ~Impl () {
456+ // First, clear all menu item references
457+ items_.clear ();
458+
448459 if (delegate_) {
449460 // Remove delegate to prevent callbacks after destruction
450461 [ns_menu_ setDelegate: nil ];
@@ -480,8 +491,11 @@ - (void)menuDidClose:(NSMenu *)menu {
480491}
481492
482493Menu::~Menu () {
483- // Unregister from event registry
484- g_menu_registry.erase (id );
494+ // Safely remove from global registry
495+ auto it = g_menu_registry.find (id );
496+ if (it != g_menu_registry.end ()) {
497+ g_menu_registry.erase (it);
498+ }
485499}
486500
487501void Menu::AddItem (std::shared_ptr<MenuItem> item) {
0 commit comments