diff --git a/quic/core/qpack/qpack_static_table_test.cc b/quic/core/qpack/qpack_static_table_test.cc
index 734d253..7c2818d 100644
--- a/quic/core/qpack/qpack_static_table_test.cc
+++ b/quic/core/qpack/qpack_static_table_test.cc
@@ -25,13 +25,13 @@
                    QpackStaticTableVector().size());
   EXPECT_TRUE(table.IsInitialized());
 
-  auto static_entries = table.GetStaticEntries();
+  const auto& static_entries = table.GetStaticEntries();
   EXPECT_EQ(QpackStaticTableVector().size(), static_entries.size());
 
-  auto static_index = table.GetStaticIndex();
+  const auto& static_index = table.GetStaticIndex();
   EXPECT_EQ(QpackStaticTableVector().size(), static_index.size());
 
-  auto static_name_index = table.GetStaticNameIndex();
+  const auto& static_name_index = table.GetStaticNameIndex();
   std::set<absl::string_view> names;
   for (auto entry : static_index) {
     names.insert(entry->name());
diff --git a/spdy/core/hpack/hpack_header_table.cc b/spdy/core/hpack/hpack_header_table.cc
index e8e469b..9e36e2f 100644
--- a/spdy/core/hpack/hpack_header_table.cc
+++ b/spdy/core/hpack/hpack_header_table.cc
@@ -174,9 +174,9 @@
     QUICHE_DCHECK_EQ(0u, size_);
     return nullptr;
   }
-  dynamic_entries_.push_front(HpackEntry(name, value,
-                                         false,  // is_static
-                                         total_insertions_));
+  dynamic_entries_.emplace_front(name, value,
+                                 false,  // is_static
+                                 total_insertions_);
   HpackEntry* new_entry = &dynamic_entries_.front();
   auto index_result = dynamic_index_.insert(new_entry);
   if (!index_result.second) {
diff --git a/spdy/core/hpack/hpack_header_table_test.cc b/spdy/core/hpack/hpack_header_table_test.cc
index 31d64b7..1b0f12b 100644
--- a/spdy/core/hpack/hpack_header_table_test.cc
+++ b/spdy/core/hpack/hpack_header_table_test.cc
@@ -56,8 +56,8 @@
   void Evict(size_t count) { return table_->Evict(count); }
 
   void AddDynamicEntry(absl::string_view name, absl::string_view value) {
-    table_->dynamic_entries_.push_back(
-        HpackEntry(name, value, false, table_->total_insertions_++));
+    table_->dynamic_entries_.emplace_back(name, value, false,
+                                          table_->total_insertions_++);
   }
 
  private:
diff --git a/spdy/core/hpack/hpack_static_table.cc b/spdy/core/hpack/hpack_static_table.cc
index 809bc82..d977db1 100644
--- a/spdy/core/hpack/hpack_static_table.cc
+++ b/spdy/core/hpack/hpack_static_table.cc
@@ -23,11 +23,10 @@
   int total_insertions = 0;
   for (const HpackStaticEntry* it = static_entry_table;
        it != static_entry_table + static_entry_count; ++it) {
-    static_entries_.push_back(
-        HpackEntry(absl::string_view(it->name, it->name_len),
-                   absl::string_view(it->value, it->value_len),
-                   true,  // is_static
-                   total_insertions));
+    static_entries_.emplace_back(absl::string_view(it->name, it->name_len),
+                                 absl::string_view(it->value, it->value_len),
+                                 true,  // is_static
+                                 total_insertions);
     HpackEntry* entry = &static_entries_.back();
     QUICHE_CHECK(static_index_.insert(entry).second);
     // Multiple static entries may have the same name, so inserts may fail.
diff --git a/spdy/core/hpack/hpack_static_table_test.cc b/spdy/core/hpack/hpack_static_table_test.cc
index 152ad82..4e79d8f 100644
--- a/spdy/core/hpack/hpack_static_table_test.cc
+++ b/spdy/core/hpack/hpack_static_table_test.cc
@@ -31,7 +31,8 @@
                     HpackStaticTableVector().size());
   EXPECT_TRUE(table_.IsInitialized());
 
-  HpackHeaderTable::EntryTable static_entries = table_.GetStaticEntries();
+  const HpackHeaderTable::EntryTable& static_entries =
+      table_.GetStaticEntries();
   EXPECT_EQ(kStaticTableSize, static_entries.size());
 
   HpackHeaderTable::UnorderedEntrySet static_index = table_.GetStaticIndex();
