ui: fix memory leak in `MapSettings`
diff --git a/selfdrive/ui/qt/maps/map_settings.cc b/selfdrive/ui/qt/maps/map_settings.cc
index e95244c574f3cf..959e0950575ad8 100644
--- a/selfdrive/ui/qt/maps/map_settings.cc
+++ b/selfdrive/ui/qt/maps/map_settings.cc
@@ -130,12 +130,12 @@ void MapSettings::updateCurrentRoute() {
       qWarning() << "JSON Parse failed on NavDestination" << dest;
       return;
     }
-    auto destination = new NavDestination(doc.object());
+    auto destination = std::make_unique<NavDestination>(doc.object());
     if (current_destination && *destination == *current_destination) return;
-    current_destination = destination;
-    current_widget->set(current_destination, true);
+    current_destination = std::move(destination);
+    current_widget->set(current_destination.get(), true);
   } else {
-    current_destination = nullptr;
+    current_destination.reset(nullptr);
     current_widget->unset("", true);
   }
   if (isVisible()) refresh();
@@ -149,7 +149,7 @@ void MapSettings::parseResponse(const QString &response, bool success) {
 
 void MapSettings::refresh() {
   bool has_home = false, has_work = false;
-  auto destinations = std::vector<NavDestination*>();
+  auto destinations = std::vector<std::unique_ptr<NavDestination>>();
 
   auto destinations_str = cur_destinations.trimmed();
   if (!destinations_str.isEmpty()) {
@@ -160,7 +160,7 @@ void MapSettings::refresh() {
     }
 
     for (auto el : doc.array()) {
-      auto destination = new NavDestination(el.toObject());
+      auto destination = std::make_unique<NavDestination>(el.toObject());
 
       // add home and work later if they are missing
       if (destination->isFavorite()) {
@@ -170,7 +170,7 @@ void MapSettings::refresh() {
 
       // skip current destination
       if (current_destination && *destination == *current_destination) continue;
-      destinations.push_back(destination);
+      destinations.push_back(std::move(destination));
     }
   }
 
@@ -178,7 +178,7 @@ void MapSettings::refresh() {
   clearLayout(destinations_layout);
 
   // Sort: HOME, WORK, and then descending-alphabetical FAVORITES, RECENTS
-  std::sort(destinations.begin(), destinations.end(), [](const NavDestination *a, const NavDestination *b) {
+  std::sort(destinations.begin(), destinations.end(), [](const auto &a, const auto &b) {
     if (a->isFavorite() && b->isFavorite()) {
       if (a->label() == NAV_FAVORITE_LABEL_HOME) return true;
       else if (b->label() == NAV_FAVORITE_LABEL_HOME) return false;
@@ -191,11 +191,11 @@ void MapSettings::refresh() {
     return a->name() < b->name();
   });
 
-  for (auto destination : destinations) {
+  for (auto &destination : destinations) {
     auto widget = new DestinationWidget(this);
-    widget->set(destination, false);
+    widget->set(destination.get(), false);
 
-    QObject::connect(widget, &QPushButton::clicked, [=]() {
+    QObject::connect(widget, &QPushButton::clicked, [&]() {
       navigateTo(destination->toJson());
       emit closeSettings();
     });
diff --git a/selfdrive/ui/qt/maps/map_settings.h b/selfdrive/ui/qt/maps/map_settings.h
index 38c021036c00eb..4dfe347760fc86 100644
--- a/selfdrive/ui/qt/maps/map_settings.h
+++ b/selfdrive/ui/qt/maps/map_settings.h
@@ -1,5 +1,7 @@
 #pragma once
 
+#include<memory>
+
 #include <QFrame>
 #include <QJsonArray>
 #include <QJsonDocument>
@@ -37,7 +39,7 @@ class MapSettings : public QFrame {
   Params params;
   QString cur_destinations;
   QVBoxLayout *destinations_layout;
-  NavDestination *current_destination;
+  std::unique_ptr<NavDestination> current_destination;
   DestinationWidget *current_widget;
 
   QPixmap close_icon;
