diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index b7f2e1a..7ccad80 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -61,7 +61,7 @@
 
  private:
   std::unique_ptr<CFX_FontMapper> m_pBuiltinMapper;
-  std::map<CFX_ByteString, CTTFontDesc*> m_FaceMap;
+  std::map<CFX_ByteString, std::unique_ptr<CTTFontDesc>> m_FaceMap;
   FXFT_Library m_FTLibrary;
   bool m_FTLibrarySupportsHinting;
 };
diff --git a/core/fxge/ge/cfx_fontmgr.cpp b/core/fxge/ge/cfx_fontmgr.cpp
index 97d1438..ec184ae 100644
--- a/core/fxge/ge/cfx_fontmgr.cpp
+++ b/core/fxge/ge/cfx_fontmgr.cpp
@@ -89,11 +89,9 @@
 }
 
 CFX_FontMgr::~CFX_FontMgr() {
-  for (const auto& pair : m_FaceMap)
-    delete pair.second;
-
-  // |m_pBuiltinMapper| references |m_FTLibrary|, so it has to be destroyed
-  // first.
+  // |m_FaceMap| and |m_pBuiltinMapper| reference |m_FTLibrary|, so they must
+  // be destroyed first.
+  m_FaceMap.clear();
   m_pBuiltinMapper.reset();
   FXFT_Done_FreeType(m_FTLibrary);
 }
@@ -132,7 +130,7 @@
   if (it == m_FaceMap.end())
     return nullptr;
 
-  CTTFontDesc* pFontDesc = it->second;
+  CTTFontDesc* pFontDesc = it->second.get();
   pFontData = pFontDesc->m_pFontData;
   pFontDesc->m_RefCount++;
   return pFontDesc->m_SingleFace;
@@ -144,7 +142,7 @@
                                      uint8_t* pData,
                                      uint32_t size,
                                      int face_index) {
-  CTTFontDesc* pFontDesc = new CTTFontDesc;
+  auto pFontDesc = pdfium::MakeUnique<CTTFontDesc>();
   pFontDesc->m_Type = 1;
   pFontDesc->m_SingleFace = nullptr;
   pFontDesc->m_pFontData = pData;
@@ -154,17 +152,16 @@
   FXFT_Library library = m_FTLibrary;
   int ret = FXFT_New_Memory_Face(library, pData, size, face_index,
                                  &pFontDesc->m_SingleFace);
-  if (ret) {
-    delete pFontDesc;
+  if (ret)
     return nullptr;
-  }
+
   ret = FXFT_Set_Pixel_Sizes(pFontDesc->m_SingleFace, 64, 64);
-  if (ret) {
-    delete pFontDesc;
+  if (ret)
     return nullptr;
-  }
-  m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)] = pFontDesc;
-  return pFontDesc->m_SingleFace;
+
+  CTTFontDesc* pResult = pFontDesc.get();
+  m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)] = std::move(pFontDesc);
+  return pResult->m_SingleFace;
 }
 
 FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size,
@@ -175,7 +172,7 @@
   if (it == m_FaceMap.end())
     return nullptr;
 
-  CTTFontDesc* pFontDesc = it->second;
+  CTTFontDesc* pFontDesc = it->second.get();
   pFontData = pFontDesc->m_pFontData;
   pFontDesc->m_RefCount++;
   int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
@@ -191,17 +188,18 @@
                                         uint8_t* pData,
                                         uint32_t size,
                                         int font_offset) {
-  CTTFontDesc* pFontDesc = new CTTFontDesc;
+  auto pFontDesc = pdfium::MakeUnique<CTTFontDesc>();
   pFontDesc->m_Type = 2;
   pFontDesc->m_pFontData = pData;
   for (int i = 0; i < 16; i++)
     pFontDesc->m_TTCFaces[i] = nullptr;
   pFontDesc->m_RefCount++;
-  m_FaceMap[KeyNameFromSize(ttc_size, checksum)] = pFontDesc;
-  int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
-  pFontDesc->m_TTCFaces[face_index] =
-      GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index);
-  return pFontDesc->m_TTCFaces[face_index];
+  CTTFontDesc* pResult = pFontDesc.get();
+  m_FaceMap[KeyNameFromSize(ttc_size, checksum)] = std::move(pFontDesc);
+  int face_index = GetTTCIndex(pResult->m_pFontData, ttc_size, font_offset);
+  pResult->m_TTCFaces[face_index] =
+      GetFixedFace(pResult->m_pFontData, ttc_size, face_index);
+  return pResult->m_TTCFaces[face_index];
 }
 
 FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData,
diff --git a/core/fxge/ge/cttfontdesc.cpp b/core/fxge/ge/cttfontdesc.cpp
index 269abfe..f750395 100644
--- a/core/fxge/ge/cttfontdesc.cpp
+++ b/core/fxge/ge/cttfontdesc.cpp
@@ -34,9 +34,5 @@
     if (i == 16)
       return -1;
   }
-  m_RefCount--;
-  if (m_RefCount)
-    return m_RefCount;
-  delete this;
-  return 0;
+  return --m_RefCount;
 }
