diff --git a/tools/gn/function_get_target_outputs.cc b/tools/gn/function_get_target_outputs.cc
index bec825f..e13e1e3 100644
--- a/tools/gn/function_get_target_outputs.cc
+++ b/tools/gn/function_get_target_outputs.cc
@@ -93,7 +93,7 @@
     *err = Err(function, "No targets defined in this context.");
     return Value();
   }
-  for (auto* item : *collector) {
+  for (const auto& item : *collector) {
     if (item->label() != label)
       continue;
 
diff --git a/tools/gn/function_get_target_outputs_unittest.cc b/tools/gn/function_get_target_outputs_unittest.cc
index 3bff238..2f746a7 100644
--- a/tools/gn/function_get_target_outputs_unittest.cc
+++ b/tools/gn/function_get_target_outputs_unittest.cc
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <utility>
+
+#include "base/memory/ptr_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "tools/gn/functions.h"
 #include "tools/gn/target.h"
@@ -57,13 +60,14 @@
 }  // namespace
 
 TEST_F(GetTargetOutputsTest, Copy) {
-  Target* action = new Target(setup_.settings(), GetLabel("//foo/", "bar"), {});
+  auto action = base::MakeUnique<Target>(
+      setup_.settings(), GetLabel("//foo/", "bar"), InputFileSet{});
   action->set_output_type(Target::COPY_FILES);
   action->sources().push_back(SourceFile("//file.txt"));
   action->action_values().outputs() =
       SubstitutionList::MakeForTest("//out/Debug/{{source_file_part}}.one");
 
-  items_.push_back(action);
+  items_.push_back(std::move(action));
 
   Err err;
   Value result = GetTargetOutputs("//foo:bar", &err);
@@ -72,13 +76,14 @@
 }
 
 TEST_F(GetTargetOutputsTest, Action) {
-  Target* action = new Target(setup_.settings(), GetLabel("//foo/", "bar"), {});
+  auto action = base::MakeUnique<Target>(
+      setup_.settings(), GetLabel("//foo/", "bar"), InputFileSet{});
   action->set_output_type(Target::ACTION);
   action->action_values().outputs() = SubstitutionList::MakeForTest(
       "//output1.txt",
       "//output2.txt");
 
-  items_.push_back(action);
+  items_.push_back(std::move(action));
 
   Err err;
   Value result = GetTargetOutputs("//foo:bar", &err);
@@ -87,14 +92,15 @@
 }
 
 TEST_F(GetTargetOutputsTest, ActionForeach) {
-  Target* action = new Target(setup_.settings(), GetLabel("//foo/", "bar"), {});
+  auto action = base::MakeUnique<Target>(
+      setup_.settings(), GetLabel("//foo/", "bar"), InputFileSet{});
   action->set_output_type(Target::ACTION_FOREACH);
   action->sources().push_back(SourceFile("//file.txt"));
   action->action_values().outputs() = SubstitutionList::MakeForTest(
       "//out/Debug/{{source_file_part}}.one",
       "//out/Debug/{{source_file_part}}.two");
 
-  items_.push_back(action);
+  items_.push_back(std::move(action));
 
   Err err;
   Value result = GetTargetOutputs("//foo:bar", &err);
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc
index adbab30..beef1ea 100644
--- a/tools/gn/function_toolchain.cc
+++ b/tools/gn/function_toolchain.cc
@@ -496,7 +496,7 @@
     *err = Err(function, "Can't define a toolchain in this context.");
     return Value();
   }
-  collector->push_back(toolchain.release());
+  collector->push_back(std::move(toolchain));
   return Value();
 }
 
diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
index 41022e6..09e3647 100644
--- a/tools/gn/functions.cc
+++ b/tools/gn/functions.cc
@@ -366,7 +366,7 @@
     *err = Err(function, "Can't define a config in this context.");
     return Value();
   }
-  collector->push_back(config.release());
+  collector->push_back(std::move(config));
 
   return Value();
 }
@@ -919,7 +919,7 @@
     *err = Err(function, "Can't define a pool in this context.");
     return Value();
   }
-  collector->push_back(pool.release());
+  collector->push_back(std::move(pool));
 
   return Value();
 }
diff --git a/tools/gn/loader.cc b/tools/gn/loader.cc
index 417a891..a07ee5a 100644
--- a/tools/gn/loader.cc
+++ b/tools/gn/loader.cc
@@ -278,10 +278,8 @@
 
 
   // Pass all of the items that were defined off to the builder.
-  for (auto*& item : collected_items) {
-    settings->build_settings()->ItemDefined(base::WrapUnique(item));
-    item = nullptr;
-  }
+  for (auto& item : collected_items)
+    settings->build_settings()->ItemDefined(std::move(item));
 
   trace.Done();
 
diff --git a/tools/gn/scope.h b/tools/gn/scope.h
index 2adcabd..20a64bc 100644
--- a/tools/gn/scope.h
+++ b/tools/gn/scope.h
@@ -9,11 +9,11 @@
 #include <memory>
 #include <set>
 #include <utility>
+#include <vector>
 
 #include "base/containers/hash_tables.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "tools/gn/err.h"
 #include "tools/gn/input_file.h"
 #include "tools/gn/pattern.h"
@@ -41,7 +41,7 @@
   typedef base::hash_map<base::StringPiece, Value, base::StringPieceHash>
       KeyValueMap;
   // Holds an owning list of Items.
-  typedef ScopedVector<Item> ItemVector;
+  typedef std::vector<std::unique_ptr<Item>> ItemVector;
 
   // A flag to indicate whether a function should recurse into nested scopes,
   // or only operate on the current scope.
diff --git a/tools/gn/target_generator.cc b/tools/gn/target_generator.cc
index 947cf9f..e8d064d 100644
--- a/tools/gn/target_generator.cc
+++ b/tools/gn/target_generator.cc
@@ -6,6 +6,8 @@
 
 #include <stddef.h>
 
+#include <utility>
+
 #include "tools/gn/action_target_generator.h"
 #include "tools/gn/binary_target_generator.h"
 #include "tools/gn/build_settings.h"
@@ -149,7 +151,7 @@
     *err = Err(function_call, "Can't define a target in this context.");
     return;
   }
-  collector->push_back(target.release());
+  collector->push_back(std::move(target));
 }
 
 const BuildSettings* TargetGenerator::GetBuildSettings() const {
