diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index e048346..4f92344 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -5,6 +5,7 @@
 #include "tools/gn/visual_studio_writer.h"
 
 #include <algorithm>
+#include <iterator>
 #include <map>
 #include <memory>
 #include <set>
@@ -211,8 +212,6 @@
 }
 
 VisualStudioWriter::~VisualStudioWriter() {
-  STLDeleteContainerPointers(projects_.begin(), projects_.end());
-  STLDeleteContainerPointers(folders_.begin(), folders_.end());
 }
 
 // static
@@ -281,7 +280,8 @@
   // Sort projects so they appear always in the same order in solution file.
   // Otherwise solution file is rewritten and reloaded by Visual Studio.
   std::sort(writer.projects_.begin(), writer.projects_.end(),
-            [](const SolutionEntry* a, const SolutionEntry* b) {
+            [](const std::unique_ptr<SolutionProject>& a,
+               const std::unique_ptr<SolutionProject>& b) {
               return a->path < b->path;
             });
 
@@ -310,7 +310,7 @@
   base::FilePath vcxproj_path = build_settings_->GetFullPath(target_file);
   std::string vcxproj_path_str = FilePathToUTF8(vcxproj_path);
 
-  projects_.push_back(new SolutionProject(
+  projects_.emplace_back(new SolutionProject(
       project_name, vcxproj_path_str,
       MakeGuid(vcxproj_path_str, kGuidSeedProject),
       FilePathToUTF8(build_settings_->GetFullPath(target->label().dir())),
@@ -648,14 +648,14 @@
   out << "# " << version_string_ << std::endl;
 
   SourceDir solution_dir(FilePathToUTF8(solution_dir_path));
-  for (const SolutionEntry* folder : folders_) {
+  for (const std::unique_ptr<SolutionEntry>& folder : folders_) {
     out << "Project(\"" << kGuidTypeFolder << "\") = \"(" << folder->name
         << ")\", \"" << RebasePath(folder->path, solution_dir) << "\", \""
         << folder->guid << "\"" << std::endl;
     out << "EndProject" << std::endl;
   }
 
-  for (const SolutionEntry* project : projects_) {
+  for (const std::unique_ptr<SolutionProject>& project : projects_) {
     out << "Project(\"" << kGuidTypeProject << "\") = \"" << project->name
         << "\", \"" << RebasePath(project->path, solution_dir) << "\", \""
         << project->guid << "\"" << std::endl;
@@ -673,7 +673,7 @@
 
   out << "\tGlobalSection(ProjectConfigurationPlatforms) = postSolution"
       << std::endl;
-  for (const SolutionProject* project : projects_) {
+  for (const std::unique_ptr<SolutionProject>& project : projects_) {
     const std::string project_config_mode =
         config_mode_prefix + project->config_platform;
     out << "\t\t" << project->guid << '.' << config_mode
@@ -688,13 +688,13 @@
   out << "\tEndGlobalSection" << std::endl;
 
   out << "\tGlobalSection(NestedProjects) = preSolution" << std::endl;
-  for (const SolutionEntry* folder : folders_) {
+  for (const std::unique_ptr<SolutionEntry>& folder : folders_) {
     if (folder->parent_folder) {
       out << "\t\t" << folder->guid << " = " << folder->parent_folder->guid
           << std::endl;
     }
   }
-  for (const SolutionEntry* project : projects_) {
+  for (const std::unique_ptr<SolutionProject>& project : projects_) {
     out << "\t\t" << project->guid << " = " << project->parent_folder->guid
         << std::endl;
   }
@@ -708,7 +708,7 @@
 
   // Get all project directories. Create solution folder for each directory.
   std::map<base::StringPiece, SolutionEntry*> processed_paths;
-  for (SolutionProject* project : projects_) {
+  for (const std::unique_ptr<SolutionProject>& project : projects_) {
     base::StringPiece folder_path = project->label_dir_path;
     if (IsSlash(folder_path[folder_path.size() - 1]))
       folder_path = folder_path.substr(0, folder_path.size() - 1);
@@ -717,12 +717,12 @@
       project->parent_folder = it->second;
     } else {
       std::string folder_path_str = folder_path.as_string();
-      SolutionEntry* folder = new SolutionEntry(
+      std::unique_ptr<SolutionEntry> folder(new SolutionEntry(
           FindLastDirComponent(SourceDir(folder_path)).as_string(),
-          folder_path_str, MakeGuid(folder_path_str, kGuidSeedFolder));
-      folders_.push_back(folder);
-      project->parent_folder = folder;
-      processed_paths[folder_path] = folder;
+          folder_path_str, MakeGuid(folder_path_str, kGuidSeedFolder)));
+      project->parent_folder = folder.get();
+      processed_paths[folder_path] = folder.get();
+      folders_.push_back(std::move(folder));
 
       if (root_folder_path_.empty()) {
         root_folder_path_ = folder_path_str;
@@ -751,38 +751,42 @@
 
   // Create also all parent folders up to |root_folder_path_|.
   SolutionFolders additional_folders;
-  for (SolutionEntry* folder : folders_) {
-    if (folder->path == root_folder_path_)
+  for (const std::unique_ptr<SolutionEntry>& solution_folder : folders_) {
+    if (solution_folder->path == root_folder_path_)
       continue;
 
+    SolutionEntry* folder = solution_folder.get();
     base::StringPiece parent_path;
     while ((parent_path = FindParentDir(&folder->path)) != root_folder_path_) {
       auto it = processed_paths.find(parent_path);
       if (it != processed_paths.end()) {
         folder = it->second;
       } else {
-        folder = new SolutionEntry(
+        std::unique_ptr<SolutionEntry> new_folder(new SolutionEntry(
             FindLastDirComponent(SourceDir(parent_path)).as_string(),
             parent_path.as_string(),
-            MakeGuid(parent_path.as_string(), kGuidSeedFolder));
-        additional_folders.push_back(folder);
-        processed_paths[parent_path] = folder;
+            MakeGuid(parent_path.as_string(), kGuidSeedFolder)));
+        processed_paths[parent_path] = new_folder.get();
+        folder = new_folder.get();
+        additional_folders.push_back(std::move(new_folder));
       }
     }
   }
-  folders_.insert(folders_.end(), additional_folders.begin(),
-                  additional_folders.end());
+  folders_.insert(folders_.end(),
+                  std::make_move_iterator(additional_folders.begin()),
+                  std::make_move_iterator(additional_folders.end()));
 
   // Sort folders by path.
   std::sort(folders_.begin(), folders_.end(),
-            [](const SolutionEntry* a, const SolutionEntry* b) {
+            [](const std::unique_ptr<SolutionEntry>& a,
+               const std::unique_ptr<SolutionEntry>& b) {
               return a->path < b->path;
             });
 
   // Match subfolders with their parents. Since |folders_| are sorted by path we
   // know that parent folder always precedes its children in vector.
-  SolutionFolders parents;
-  for (SolutionEntry* folder : folders_) {
+  std::vector<SolutionEntry*> parents;
+  for (const std::unique_ptr<SolutionEntry>& folder : folders_) {
     while (!parents.empty()) {
       if (base::StartsWith(folder->path, parents.back()->path,
                            base::CompareCase::SENSITIVE)) {
@@ -792,7 +796,7 @@
         parents.pop_back();
       }
     }
-    parents.push_back(folder);
+    parents.push_back(folder.get());
   }
 }
 
diff --git a/tools/gn/visual_studio_writer.h b/tools/gn/visual_studio_writer.h
index 5b578ed..2971896 100644
--- a/tools/gn/visual_studio_writer.h
+++ b/tools/gn/visual_studio_writer.h
@@ -6,6 +6,7 @@
 #define TOOLS_GN_VISUAL_STUDIO_WRITER_H_
 
 #include <iosfwd>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -77,8 +78,8 @@
     std::string config_platform;
   };
 
-  using SolutionProjects = std::vector<SolutionProject*>;
-  using SolutionFolders = std::vector<SolutionEntry*>;
+  using SolutionProjects = std::vector<std::unique_ptr<SolutionProject>>;
+  using SolutionFolders = std::vector<std::unique_ptr<SolutionEntry>>;
 
   VisualStudioWriter(const BuildSettings* build_settings,
                      const char* config_platform,
diff --git a/tools/gn/visual_studio_writer_unittest.cc b/tools/gn/visual_studio_writer_unittest.cc
index d70117f..16e327b 100644
--- a/tools/gn/visual_studio_writer_unittest.cc
+++ b/tools/gn/visual_studio_writer_unittest.cc
@@ -31,22 +31,22 @@
 
   std::string path =
       MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "base", path, MakeGuid(path, "project"),
       MakeTestPath("/foo/chromium/src/base"), "Win32"));
 
   path = MakeTestPath("/foo/chromium/src/out/Debug/obj/tools/gn/gn.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "gn", path, MakeGuid(path, "project"),
       MakeTestPath("/foo/chromium/src/tools/gn"), "Win32"));
 
   path = MakeTestPath("/foo/chromium/src/out/Debug/obj/chrome/chrome.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "chrome", path, MakeGuid(path, "project"),
       MakeTestPath("/foo/chromium/src/chrome"), "Win32"));
 
   path = MakeTestPath("/foo/chromium/src/out/Debug/obj/base/bar.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "bar", path, MakeGuid(path, "project"),
       MakeTestPath("/foo/chromium/src/base"), "Win32"));
 
@@ -71,12 +71,12 @@
   ASSERT_EQ("gn", writer.folders_[3]->name);
   ASSERT_EQ(MakeTestPath("/foo/chromium/src/tools/gn"),
             writer.folders_[3]->path);
-  ASSERT_EQ(writer.folders_[2], writer.folders_[3]->parent_folder);
+  ASSERT_EQ(writer.folders_[2].get(), writer.folders_[3]->parent_folder);
 
-  ASSERT_EQ(writer.folders_[0], writer.projects_[0]->parent_folder);
-  ASSERT_EQ(writer.folders_[3], writer.projects_[1]->parent_folder);
-  ASSERT_EQ(writer.folders_[1], writer.projects_[2]->parent_folder);
-  ASSERT_EQ(writer.folders_[0], writer.projects_[3]->parent_folder);
+  ASSERT_EQ(writer.folders_[0].get(), writer.projects_[0]->parent_folder);
+  ASSERT_EQ(writer.folders_[3].get(), writer.projects_[1]->parent_folder);
+  ASSERT_EQ(writer.folders_[1].get(), writer.projects_[2]->parent_folder);
+  ASSERT_EQ(writer.folders_[0].get(), writer.projects_[3]->parent_folder);
 }
 
 TEST_F(VisualStudioWriterTest, ResolveSolutionFolders_AbsPath) {
@@ -85,24 +85,24 @@
 
   std::string path =
       MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "base", path, MakeGuid(path, "project"),
       MakeTestPath("/foo/chromium/src/base"), "Win32"));
 
   path = MakeTestPath("/foo/chromium/src/out/Debug/obj/tools/gn/gn.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "gn", path, MakeGuid(path, "project"),
       MakeTestPath("/foo/chromium/src/tools/gn"), "Win32"));
 
   path = MakeTestPath(
       "/foo/chromium/src/out/Debug/obj/ABS_PATH/C/foo/bar/bar.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "bar", path, MakeGuid(path, "project"), MakeTestPath("/foo/bar"),
       "Win32"));
 
   path = MakeTestPath(
       "/foo/chromium/src/out/Debug/obj/ABS_PATH/C/foo/bar/baz/baz.vcxproj");
-  writer.projects_.push_back(new VisualStudioWriter::SolutionProject(
+  writer.projects_.emplace_back(new VisualStudioWriter::SolutionProject(
       "baz", path, MakeGuid(path, "project"), MakeTestPath("/foo/bar/baz"),
       "Win32"));
 
@@ -118,7 +118,7 @@
 
   ASSERT_EQ("baz", writer.folders_[1]->name);
   ASSERT_EQ(MakeTestPath("/foo/bar/baz"), writer.folders_[1]->path);
-  ASSERT_EQ(writer.folders_[0], writer.folders_[1]->parent_folder);
+  ASSERT_EQ(writer.folders_[0].get(), writer.folders_[1]->parent_folder);
 
   ASSERT_EQ("chromium", writer.folders_[2]->name);
   ASSERT_EQ(MakeTestPath("/foo/chromium"), writer.folders_[2]->path);
@@ -126,23 +126,23 @@
 
   ASSERT_EQ("src", writer.folders_[3]->name);
   ASSERT_EQ(MakeTestPath("/foo/chromium/src"), writer.folders_[3]->path);
-  ASSERT_EQ(writer.folders_[2], writer.folders_[3]->parent_folder);
+  ASSERT_EQ(writer.folders_[2].get(), writer.folders_[3]->parent_folder);
 
   ASSERT_EQ("base", writer.folders_[4]->name);
   ASSERT_EQ(MakeTestPath("/foo/chromium/src/base"), writer.folders_[4]->path);
-  ASSERT_EQ(writer.folders_[3], writer.folders_[4]->parent_folder);
+  ASSERT_EQ(writer.folders_[3].get(), writer.folders_[4]->parent_folder);
 
   ASSERT_EQ("tools", writer.folders_[5]->name);
   ASSERT_EQ(MakeTestPath("/foo/chromium/src/tools"), writer.folders_[5]->path);
-  ASSERT_EQ(writer.folders_[3], writer.folders_[5]->parent_folder);
+  ASSERT_EQ(writer.folders_[3].get(), writer.folders_[5]->parent_folder);
 
   ASSERT_EQ("gn", writer.folders_[6]->name);
   ASSERT_EQ(MakeTestPath("/foo/chromium/src/tools/gn"),
             writer.folders_[6]->path);
-  ASSERT_EQ(writer.folders_[5], writer.folders_[6]->parent_folder);
+  ASSERT_EQ(writer.folders_[5].get(), writer.folders_[6]->parent_folder);
 
-  ASSERT_EQ(writer.folders_[4], writer.projects_[0]->parent_folder);
-  ASSERT_EQ(writer.folders_[6], writer.projects_[1]->parent_folder);
-  ASSERT_EQ(writer.folders_[0], writer.projects_[2]->parent_folder);
-  ASSERT_EQ(writer.folders_[1], writer.projects_[3]->parent_folder);
+  ASSERT_EQ(writer.folders_[4].get(), writer.projects_[0]->parent_folder);
+  ASSERT_EQ(writer.folders_[6].get(), writer.projects_[1]->parent_folder);
+  ASSERT_EQ(writer.folders_[0].get(), writer.projects_[2]->parent_folder);
+  ASSERT_EQ(writer.folders_[1].get(), writer.projects_[3]->parent_folder);
 }
