Fix boost::containers::stable_vector memory leak in MapWidget by local variable

This commit is contained in:
AdenKoperczak 2025-03-14 12:25:18 -04:00
parent 0fff5f9e4d
commit 61ac1e5612

View file

@ -1,3 +1,4 @@
#include <ranges>
#include <scwx/qt/map/map_widget.hpp>
#include <scwx/qt/gl/gl.hpp>
#include <scwx/qt/manager/font_manager.hpp>
@ -205,7 +206,6 @@ public:
std::vector<MapStyle> customStyles_ {
MapStyle {.name_ {"Custom"}, .url_ {}, .drawBelow_ {}}};
QStringList styleLayers_;
types::LayerVector customLayers_;
boost::uuids::uuid customStyleUrlChangedCallbackId_ {};
boost::uuids::uuid customStyleDrawBelowChangedCallbackId_ {};
@ -1185,22 +1185,20 @@ void MapWidgetImpl::AddLayers()
layerList_.clear();
genericLayers_.clear();
placefileLayers_.clear();
customLayers_.clear();
customLayers_.shrink_to_fit();
// Update custom layer list from model
customLayers_ = model::LayerModel::Instance()->GetLayers();
types::LayerVector customLayers = model::LayerModel::Instance()->GetLayers();
// Start by drawing layers before any style-defined layers
std::string before = styleLayers_.front().toStdString();
// Loop through each custom layer in reverse order
for (auto it = customLayers_.crbegin(); it != customLayers_.crend(); ++it)
for (const auto & customLayer : std::ranges::reverse_view(customLayers))
{
if (it->type_ == types::LayerType::Map)
if (customLayer.type_ == types::LayerType::Map)
{
// Style-defined map layers
switch (std::get<types::MapLayer>(it->description_))
switch (std::get<types::MapLayer>(customLayer.description_))
{
// Subsequent layers are drawn underneath the map symbology layer
case types::MapLayer::MapUnderlay:
@ -1216,10 +1214,10 @@ void MapWidgetImpl::AddLayers()
break;
}
}
else if (it->displayed_[id_])
else if (customLayer.displayed_[id_])
{
// If the layer is displayed for the current map, add it
AddLayer(it->type_, it->description_, before);
AddLayer(customLayer.type_, customLayer.description_, before);
}
}
}