LINUX.ORG.RU

wxWidgets и умные указатели

 , ,


0

3

Почему при использовании умных указателей в wxWidgets вылетает segmentation fault 11
Без них все норм.

MenuFrame::MenuFrame (const wxString& title, const wxPoint& pos, const wxSize& size)
	: wxFrame (nullptr, wxID_ANY, title, pos, size)
{
	theoryBtn = std::make_unique<wxButton>   (this, 0, "Теория");
	testBtn   = std::make_unique<wxButton>   (this, 0, "Тестирование");
	menuSizer = std::make_unique<wxBoxSizer> (wxVERTICAL);

	menuSizer->Add (theoryBtn.get(), 0, wxALL, 10);
	menuSizer->Add (testBtn  .get(), 0, wxALL, 10);

	SetSizerAndFit (menuSizer.get());
}

Я так думаю wxWidgets пытается освободить память, которая и так уже освобождена. Получается с wxWidgets лучше не пользоваться умными указателями, потому-что возможно она сама это делает за меня.

★★★

Я так думаю wxWidgets пытается освободить память, которая и так уже освобождена.

https://wiki.wxwidgets.org/Avoiding_Memory_Leaks#Child_windows

В gtkmm тоже есть подобная практика, но там надо явно указывать, что тулкит будет следить за освобождением: https://developer.gnome.org/gtkmm-tutorial/stable/sec-memory-widgets.html.en#...

i-rinat ★★★★★
()

Да, смартпоинтеры в этом случае не нужны. Объекты имеют родителей (parent) и выстраиваются в иерархию. wxWidgets сам удаляет соответствующие объекты (кнопки, поля ввода, панели и т.п.), например при закрытии диалога, которому они принадлежали.

Amp ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.