diff --git a/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp b/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
index cab99ec..36f6226 100644
--- a/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
+++ b/core/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
@@ -1365,7 +1365,7 @@
   FX_BOOL bNoOriginal = (m_dwFlags & FPDFCREATE_NO_ORIGINAL) != 0;
   for (const auto& pair : *m_pDocument) {
     const uint32_t objnum = pair.first;
-    const CPDF_Object* pObj = pair.second;
+    const CPDF_Object* pObj = pair.second.get();
     if (bIncremental || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum)
       continue;
     if (m_pParser && m_pParser->IsValidObjectNumber(objnum) &&
diff --git a/core/fpdfapi/fpdf_parser/cfdf_document.cpp b/core/fpdfapi/fpdf_parser/cfdf_document.cpp
index 0182948..92b20ca 100644
--- a/core/fpdfapi/fpdf_parser/cfdf_document.cpp
+++ b/core/fpdfapi/fpdf_parser/cfdf_document.cpp
@@ -90,7 +90,8 @@
 
   buf << "%FDF-1.2\r\n";
   for (const auto& pair : *this)
-    buf << pair.first << " 0 obj\r\n" << pair.second << "\r\nendobj\r\n\r\n";
+    buf << pair.first << " 0 obj\r\n"
+        << pair.second.get() << "\r\nendobj\r\n\r\n";
 
   buf << "trailer\r\n<</Root " << m_pRootDict->GetObjNum()
       << " 0 R>>\r\n%%EOF\r\n";
diff --git a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
index dc639fe..800e34b 100644
--- a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
+++ b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp
@@ -11,15 +11,12 @@
 
 CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder() : m_LastObjNum(0) {}
 
-CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {
-  for (const auto& pair : m_IndirectObjs)
-    delete pair.second;
-}
+CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {}
 
 CPDF_Object* CPDF_IndirectObjectHolder::GetIndirectObject(
     uint32_t objnum) const {
   auto it = m_IndirectObjs.find(objnum);
-  return it != m_IndirectObjs.end() ? it->second : nullptr;
+  return it != m_IndirectObjs.end() ? it->second.get() : nullptr;
 }
 
 CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject(
@@ -37,10 +34,7 @@
 
   pObj->m_ObjNum = objnum;
   m_LastObjNum = std::max(m_LastObjNum, objnum);
-  if (m_IndirectObjs[objnum])
-    delete m_IndirectObjs[objnum];
-
-  m_IndirectObjs[objnum] = pObj;
+  m_IndirectObjs[objnum].reset(pObj);
   return pObj;
 }
 
@@ -53,7 +47,7 @@
     return pObj->m_ObjNum;
 
   m_LastObjNum++;
-  m_IndirectObjs[m_LastObjNum] = pObj;
+  m_IndirectObjs[m_LastObjNum].reset(pObj);
   pObj->m_ObjNum = m_LastObjNum;
   return m_LastObjNum;
 }
@@ -65,15 +59,12 @@
     return false;
 
   CPDF_Object* pOldObj = GetIndirectObject(objnum);
-  if (pOldObj) {
-    if (pObj->GetGenNum() <= pOldObj->GetGenNum()) {
-      delete pObj;
-      return false;
-    }
-    delete pOldObj;
+  if (pOldObj && pObj->GetGenNum() <= pOldObj->GetGenNum()) {
+    delete pObj;
+    return false;
   }
   pObj->m_ObjNum = objnum;
-  m_IndirectObjs[objnum] = pObj;
+  m_IndirectObjs[objnum].reset(pObj);
   m_LastObjNum = std::max(m_LastObjNum, objnum);
   return true;
 }
@@ -83,6 +74,5 @@
   if (!pObj || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum)
     return;
 
-  delete pObj;
   m_IndirectObjs.erase(objnum);
 }
diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_indirect_object_holder.h b/core/fpdfapi/fpdf_parser/include/cpdf_indirect_object_holder.h
index 57dafb0..2abbda2 100644
--- a/core/fpdfapi/fpdf_parser/include/cpdf_indirect_object_holder.h
+++ b/core/fpdfapi/fpdf_parser/include/cpdf_indirect_object_holder.h
@@ -8,6 +8,7 @@
 #define CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_INDIRECT_OBJECT_HOLDER_H_
 
 #include <map>
+#include <memory>
 
 #include "core/fxcrt/include/fx_system.h"
 
@@ -15,8 +16,8 @@
 
 class CPDF_IndirectObjectHolder {
  public:
-  using iterator = std::map<uint32_t, CPDF_Object*>::iterator;
-  using const_iterator = std::map<uint32_t, CPDF_Object*>::const_iterator;
+  using const_iterator =
+      std::map<uint32_t, std::unique_ptr<CPDF_Object>>::const_iterator;
 
   CPDF_IndirectObjectHolder();
   virtual ~CPDF_IndirectObjectHolder();
@@ -33,9 +34,7 @@
   uint32_t GetLastObjNum() const { return m_LastObjNum; }
   void SetLastObjNum(uint32_t objnum) { m_LastObjNum = objnum; }
 
-  iterator begin() { return m_IndirectObjs.begin(); }
   const_iterator begin() const { return m_IndirectObjs.begin(); }
-  iterator end() { return m_IndirectObjs.end(); }
   const_iterator end() const { return m_IndirectObjs.end(); }
 
  protected:
@@ -43,7 +42,7 @@
 
  private:
   uint32_t m_LastObjNum;
-  std::map<uint32_t, CPDF_Object*> m_IndirectObjs;
+  std::map<uint32_t, std::unique_ptr<CPDF_Object>> m_IndirectObjs;
 };
 
 #endif  // CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_INDIRECT_OBJECT_HOLDER_H_
diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_object.h b/core/fpdfapi/fpdf_parser/include/cpdf_object.h
index 115ce02..de14503 100644
--- a/core/fpdfapi/fpdf_parser/include/cpdf_object.h
+++ b/core/fpdfapi/fpdf_parser/include/cpdf_object.h
@@ -7,6 +7,7 @@
 #ifndef CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_OBJECT_H_
 #define CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_OBJECT_H_
 
+#include <memory>
 #include <set>
 
 #include "core/fxcrt/include/fx_string.h"
@@ -92,6 +93,7 @@
   friend class CPDF_Parser;
   friend class CPDF_Reference;
   friend class CPDF_Stream;
+  friend struct std::default_delete<CPDF_Object>;
 
   CPDF_Object() : m_ObjNum(0), m_GenNum(0) {}
   virtual ~CPDF_Object();
