То, что вы храните в наборе виджетов, это указатель.НЕ объект.Проблема с вашим дизайном заключается в том, что неясно, кто должен владеть объектом, поэтому уничтожить его.
Я бы изменил интерфейс, чтобы сделать владение явным.
Опция 1:
WinHandler владеет НЕ владельцем виджета:
void AddWidget(Widget& w) { WCount++; WidgetSet[WCount] = &w; }
Опция 2:
WinHandler Принимает право собственности на виджет
void AddWidget(std::auto_ptr<Widget> w) { WCount++; WidgetSet[WCount].reset(w); }
std::auto_ptr<WinControl> WidgetSet[MAX_LENGTH];
Опция 2a:
(для тех, у кого более новые компиляторы)
WinHandler Принимает право собственности на виджет
void AddWidget(std::unique_ptr<Widget>& w) { WCount++; WidgetSet[WCount] = std::move(w); }
std::unique_ptr<Widget> WidgetSet[MAX_LENGTH];
Опция 3:
(для тех, у кого более новые компиляторы)
WinHandler доля владение виджетом
void AddWidget(const std::shared_ptr<Widget>& w) { WCount++; WidgetSet[WCount] = w; }
std::shared_ptr<Widget> WidgetSet[MAX_LENGTH];