diff --git a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp
index 0ea4a17..de9d109 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp
@@ -197,98 +197,113 @@
   m_RampG = &pTransferFunc->m_Samples[256];
   m_RampB = &pTransferFunc->m_Samples[512];
 }
-void CPDF_DIBTransferFunc::TranslateScanline(uint8_t* dest_buf,
-                                             const uint8_t* src_buf) const {
-  int i;
+
+void CPDF_DIBTransferFunc::TranslateScanline(
+    const uint8_t* src_buf,
+    std::vector<uint8_t>* dest_buf) const {
   FX_BOOL bSkip = FALSE;
   switch (m_pSrc->GetFormat()) {
     case FXDIB_1bppRgb: {
-      int r0 = m_RampR[0], g0 = m_RampG[0], b0 = m_RampB[0];
-      int r1 = m_RampR[255], g1 = m_RampG[255], b1 = m_RampB[255];
-      for (i = 0; i < m_Width; i++) {
+      int r0 = m_RampR[0];
+      int g0 = m_RampG[0];
+      int b0 = m_RampB[0];
+      int r1 = m_RampR[255];
+      int g1 = m_RampG[255];
+      int b1 = m_RampB[255];
+      int index = 0;
+      for (int i = 0; i < m_Width; i++) {
         if (src_buf[i / 8] & (1 << (7 - i % 8))) {
-          *dest_buf++ = b1;
-          *dest_buf++ = g1;
-          *dest_buf++ = r1;
+          (*dest_buf)[index++] = b1;
+          (*dest_buf)[index++] = g1;
+          (*dest_buf)[index++] = r1;
         } else {
-          *dest_buf++ = b0;
-          *dest_buf++ = g0;
-          *dest_buf++ = r0;
+          (*dest_buf)[index++] = b0;
+          (*dest_buf)[index++] = g0;
+          (*dest_buf)[index++] = r0;
         }
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-        dest_buf++;
+        index++;
 #endif
       }
       break;
     }
     case FXDIB_1bppMask: {
-      int m0 = m_RampR[0], m1 = m_RampR[255];
-      for (i = 0; i < m_Width; i++) {
-        if (src_buf[i / 8] & (1 << (7 - i % 8))) {
-          *dest_buf++ = m1;
-        } else {
-          *dest_buf++ = m0;
-        }
+      int m0 = m_RampR[0];
+      int m1 = m_RampR[255];
+      int index = 0;
+      for (int i = 0; i < m_Width; i++) {
+        if (src_buf[i / 8] & (1 << (7 - i % 8)))
+          (*dest_buf)[index++] = m1;
+        else
+          (*dest_buf)[index++] = m0;
       }
       break;
     }
     case FXDIB_8bppRgb: {
       FX_ARGB* pPal = m_pSrc->GetPalette();
-      for (i = 0; i < m_Width; i++) {
+      int index = 0;
+      for (int i = 0; i < m_Width; i++) {
         if (pPal) {
           FX_ARGB src_argb = pPal[*src_buf];
-          *dest_buf++ = m_RampB[FXARGB_R(src_argb)];
-          *dest_buf++ = m_RampG[FXARGB_G(src_argb)];
-          *dest_buf++ = m_RampR[FXARGB_B(src_argb)];
+          (*dest_buf)[index++] = m_RampB[FXARGB_R(src_argb)];
+          (*dest_buf)[index++] = m_RampG[FXARGB_G(src_argb)];
+          (*dest_buf)[index++] = m_RampR[FXARGB_B(src_argb)];
         } else {
           uint32_t src_byte = *src_buf;
-          *dest_buf++ = m_RampB[src_byte];
-          *dest_buf++ = m_RampG[src_byte];
-          *dest_buf++ = m_RampR[src_byte];
+          (*dest_buf)[index++] = m_RampB[src_byte];
+          (*dest_buf)[index++] = m_RampG[src_byte];
+          (*dest_buf)[index++] = m_RampR[src_byte];
         }
         src_buf++;
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-        dest_buf++;
+        index++;
 #endif
       }
       break;
     }
-    case FXDIB_8bppMask:
-      for (i = 0; i < m_Width; i++) {
-        *dest_buf++ = m_RampR[*(src_buf++)];
+    case FXDIB_8bppMask: {
+      int index = 0;
+      for (int i = 0; i < m_Width; i++) {
+        (*dest_buf)[index++] = m_RampR[*(src_buf++)];
       }
       break;
-    case FXDIB_Rgb:
-      for (i = 0; i < m_Width; i++) {
-        *dest_buf++ = m_RampB[*(src_buf++)];
-        *dest_buf++ = m_RampG[*(src_buf++)];
-        *dest_buf++ = m_RampR[*(src_buf++)];
+    }
+    case FXDIB_Rgb: {
+      int index = 0;
+      for (int i = 0; i < m_Width; i++) {
+        (*dest_buf)[index++] = m_RampB[*(src_buf++)];
+        (*dest_buf)[index++] = m_RampG[*(src_buf++)];
+        (*dest_buf)[index++] = m_RampR[*(src_buf++)];
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-        dest_buf++;
+        index++;
 #endif
       }
       break;
+    }
     case FXDIB_Rgb32:
       bSkip = TRUE;
-    case FXDIB_Argb:
-      for (i = 0; i < m_Width; i++) {
-        *dest_buf++ = m_RampB[*(src_buf++)];
-        *dest_buf++ = m_RampG[*(src_buf++)];
-        *dest_buf++ = m_RampR[*(src_buf++)];
+    case FXDIB_Argb: {
+      int index = 0;
+      for (int i = 0; i < m_Width; i++) {
+        (*dest_buf)[index++] = m_RampB[*(src_buf++)];
+        (*dest_buf)[index++] = m_RampG[*(src_buf++)];
+        (*dest_buf)[index++] = m_RampR[*(src_buf++)];
         if (!bSkip) {
-          *dest_buf++ = *src_buf;
+          (*dest_buf)[index++] = *src_buf;
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
         } else {
-          dest_buf++;
+          index++;
 #endif
         }
         src_buf++;
       }
       break;
+    }
     default:
       break;
   }
 }
+
 void CPDF_DIBTransferFunc::TranslateDownSamples(uint8_t* dest_buf,
                                                 const uint8_t* src_buf,
                                                 int pixels,
diff --git a/core/fpdfapi/fpdf_render/render_int.h b/core/fpdfapi/fpdf_render/render_int.h
index edbbad5..4494b8c 100644
--- a/core/fpdfapi/fpdf_render/render_int.h
+++ b/core/fpdfapi/fpdf_render/render_int.h
@@ -9,6 +9,7 @@
 
 #include <map>
 #include <memory>
+#include <vector>
 
 #include "core/fpdfapi/fpdf_page/cpdf_countedobject.h"
 #include "core/fpdfapi/fpdf_page/cpdf_graphicstates.h"
@@ -618,8 +619,8 @@
   // CFX_FilteredDIB
   FXDIB_Format GetDestFormat() override;
   FX_ARGB* GetDestPalette() override;
-  void TranslateScanline(uint8_t* dest_buf,
-                         const uint8_t* src_buf) const override;
+  void TranslateScanline(const uint8_t* src_buf,
+                         std::vector<uint8_t>* dest_buf) const override;
   void TranslateDownSamples(uint8_t* dest_buf,
                             const uint8_t* src_buf,
                             int pixels,
diff --git a/core/fxcrt/include/fx_memory.h b/core/fxcrt/include/fx_memory.h
index fa8da60..53e6b9d 100644
--- a/core/fxcrt/include/fx_memory.h
+++ b/core/fxcrt/include/fx_memory.h
@@ -23,6 +23,7 @@
 
 #include <stdlib.h>
 #include <limits>
+#include <memory>
 #include <new>
 
 NEVER_INLINE void FX_OutOfMemoryTerminate();
@@ -100,6 +101,12 @@
   inline void operator()(T* ptr) const { ptr->Release(); }
 };
 
+// Used to help transfer ownership of a raw pointer to std::unique_ptr.
+template <typename T>
+std::unique_ptr<T> WrapUnique(T* ptr) {
+  return std::unique_ptr<T>(ptr);
+}
+
 class CFX_Deletable {
  public:
   virtual ~CFX_Deletable() {}
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 2b04b42..0386379 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -9,6 +9,7 @@
 #include <algorithm>
 
 #include "core/fxcodec/include/fx_codec.h"
+#include "core/fxcrt/include/fx_memory.h"
 #include "core/fxge/dib/dib_int.h"
 #include "core/fxge/ge/fx_text_int.h"
 #include "core/fxge/include/fx_ge.h"
@@ -420,23 +421,19 @@
 CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap,
                                          FX_BOOL bRgbByteOrder,
                                          CFX_DIBitmap* pOriDevice,
-                                         FX_BOOL bGroupKnockout) {
-  m_pBitmap = pBitmap;
-  m_pClipRgn = nullptr;
-  m_pPlatformBitmap = nullptr;
-  m_pPlatformGraphics = nullptr;
-  m_pDwRenderTartget = nullptr;
-  m_bRgbByteOrder = bRgbByteOrder;
-  m_pOriDevice = pOriDevice;
-  m_bGroupKnockout = bGroupKnockout;
-  m_FillFlags = 0;
+                                         FX_BOOL bGroupKnockout)
+    : m_pBitmap(pBitmap),
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+      m_pPlatformGraphics(nullptr),
+#endif
+      m_FillFlags(0),
+      m_bRgbByteOrder(bRgbByteOrder),
+      m_pOriDevice(pOriDevice),
+      m_bGroupKnockout(bGroupKnockout) {
   InitPlatform();
 }
 
 CFX_AggDeviceDriver::~CFX_AggDeviceDriver() {
-  delete m_pClipRgn;
-  for (int i = 0; i < m_StateStack.GetSize(); i++)
-    delete m_StateStack[i];
   DestroyPlatform();
 }
 
@@ -499,29 +496,24 @@
 }
 
 void CFX_AggDeviceDriver::SaveState() {
-  CFX_ClipRgn* pClip = nullptr;
-  if (m_pClipRgn) {
-    pClip = new CFX_ClipRgn(*m_pClipRgn);
-  }
-  m_StateStack.Add(pClip);
+  std::unique_ptr<CFX_ClipRgn> pClip;
+  if (m_pClipRgn)
+    pClip.reset(new CFX_ClipRgn(*m_pClipRgn));
+  m_StateStack.push_back(std::move(pClip));
 }
 
 void CFX_AggDeviceDriver::RestoreState(bool bKeepSaved) {
-  delete m_pClipRgn;
-  m_pClipRgn = nullptr;
+  m_pClipRgn.reset();
 
-  int size = m_StateStack.GetSize();
-  if (!size)
+  if (m_StateStack.empty())
     return;
 
-  CFX_ClipRgn* pSavedClip = m_StateStack[size - 1];
   if (bKeepSaved) {
-    if (pSavedClip) {
-      m_pClipRgn = new CFX_ClipRgn(*pSavedClip);
-    }
+    if (m_StateStack.back())
+      m_pClipRgn.reset(new CFX_ClipRgn(*m_StateStack.back()));
   } else {
-    m_StateStack.RemoveAt(size - 1);
-    m_pClipRgn = pSavedClip;
+    m_pClipRgn = std::move(m_StateStack.back());
+    m_StateStack.pop_back();
   }
 }
 
@@ -555,8 +547,8 @@
                                               int fill_mode) {
   m_FillFlags = fill_mode;
   if (!m_pClipRgn) {
-    m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
-                                 GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+    m_pClipRgn.reset(new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
+                                     GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
   }
   if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
     CFX_FloatRect rectf;
@@ -588,8 +580,8 @@
     const CFX_Matrix* pObject2Device,
     const CFX_GraphStateData* pGraphState) {
   if (!m_pClipRgn) {
-    m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
-                                 GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+    m_pClipRgn.reset(new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
+                                     GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
   }
   CAgg_PathData path_data;
   path_data.BuildPath(pPathData, nullptr);
@@ -1444,7 +1436,7 @@
     void* pIccTransform) {
   CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : nullptr;
   CFX_Renderer render;
-  if (!render.Init(m_pBitmap, pt, m_pClipRgn, color, bFullCover,
+  if (!render.Init(m_pBitmap, pt, m_pClipRgn.get(), color, bFullCover,
                    m_bRgbByteOrder, alpha_flag, pIccTransform)) {
     return FALSE;
   }
@@ -1659,14 +1651,14 @@
     return TRUE;
 
   if (pBitmap->IsAlphaMask()) {
-    return m_pBitmap->CompositeMask(left, top, pSrcRect->Width(),
-                                    pSrcRect->Height(), pBitmap, argb,
-                                    pSrcRect->left, pSrcRect->top, blend_type,
-                                    m_pClipRgn, m_bRgbByteOrder, 0, nullptr);
+    return m_pBitmap->CompositeMask(
+        left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb,
+        pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn.get(),
+        m_bRgbByteOrder, 0, nullptr);
   }
   return m_pBitmap->CompositeBitmap(
       left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left,
-      pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, nullptr);
+      pSrcRect->top, blend_type, m_pClipRgn.get(), m_bRgbByteOrder, nullptr);
 }
 
 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource,
@@ -1692,8 +1684,8 @@
   FX_RECT dest_clip = dest_rect;
   dest_clip.Intersect(*pClipRect);
   CFX_BitmapComposer composer;
-  composer.Compose(m_pBitmap, m_pClipRgn, 255, argb, dest_clip, FALSE, FALSE,
-                   FALSE, m_bRgbByteOrder, 0, nullptr, blend_type);
+  composer.Compose(m_pBitmap, m_pClipRgn.get(), 255, argb, dest_clip, FALSE,
+                   FALSE, FALSE, m_bRgbByteOrder, 0, nullptr, blend_type);
   dest_clip.Offset(-dest_rect.left, -dest_rect.top);
   CFX_ImageStretcher stretcher(&composer, pSource, dest_width, dest_height,
                                dest_clip, flags);
@@ -1713,8 +1705,8 @@
     return TRUE;
 
   CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer;
-  pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix,
-                   render_flags, m_bRgbByteOrder, 0, nullptr);
+  pRenderer->Start(m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb,
+                   pMatrix, render_flags, m_bRgbByteOrder, 0, nullptr);
   handle = pRenderer;
   return TRUE;
 }
@@ -1746,9 +1738,8 @@
     return false;
 
   SetBitmap(pBitmap);
-  IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(
-      pBitmap, bRgbByteOrder, pOriDevice, bGroupKnockout);
-  SetDeviceDriver(pDriver);
+  SetDeviceDriver(WrapUnique(new CFX_AggDeviceDriver(
+      pBitmap, bRgbByteOrder, pOriDevice, bGroupKnockout)));
   return true;
 }
 
@@ -1763,9 +1754,8 @@
     return false;
   }
   SetBitmap(pBitmap);
-  IFX_RenderDeviceDriver* pDriver =
-      new CFX_AggDeviceDriver(pBitmap, FALSE, pOriDevice, FALSE);
-  SetDeviceDriver(pDriver);
+  SetDeviceDriver(
+      WrapUnique(new CFX_AggDeviceDriver(pBitmap, FALSE, pOriDevice, FALSE)));
   return true;
 }
 
diff --git a/core/fxge/agg/fx_agg_driver.h b/core/fxge/agg/fx_agg_driver.h
index 15f9706..ff02ec7 100644
--- a/core/fxge/agg/fx_agg_driver.h
+++ b/core/fxge/agg/fx_agg_driver.h
@@ -7,6 +7,9 @@
 #ifndef CORE_FXGE_AGG_FX_AGG_DRIVER_H_
 #define CORE_FXGE_AGG_FX_AGG_DRIVER_H_
 
+#include <memory>
+#include <vector>
+
 #include "core/fxge/include/ifx_renderdevicedriver.h"
 #include "third_party/agg23/agg_clip_liang_barsky.h"
 #include "third_party/agg23/agg_path_storage.h"
@@ -108,11 +111,11 @@
 
  private:
   CFX_DIBitmap* m_pBitmap;
-  CFX_ClipRgn* m_pClipRgn;
-  CFX_ArrayTemplate<CFX_ClipRgn*> m_StateStack;
+  std::unique_ptr<CFX_ClipRgn> m_pClipRgn;
+  std::vector<std::unique_ptr<CFX_ClipRgn>> m_StateStack;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
   void* m_pPlatformGraphics;
-  void* m_pPlatformBitmap;
-  void* m_pDwRenderTartget;
+#endif
   int m_FillFlags;
   FX_BOOL m_bRgbByteOrder;
   CFX_DIBitmap* m_pOriDevice;
diff --git a/core/fxge/apple/fx_quartz_device.cpp b/core/fxge/apple/fx_quartz_device.cpp
index b3591a3..a9b9268 100644
--- a/core/fxge/apple/fx_quartz_device.cpp
+++ b/core/fxge/apple/fx_quartz_device.cpp
@@ -10,6 +10,7 @@
 #include "core/fxge/agg/fx_agg_driver.h"
 #endif
 
+#include "core/fxcrt/include/fx_memory.h"
 #include "core/fxge/dib/dib_int.h"
 #include "core/fxge/ge/fx_text_int.h"
 #include "core/fxge/include/fx_freetype.h"
@@ -1018,34 +1019,32 @@
   }
   m_pContext = context;
   CGContextRetain(m_pContext);
-  IFX_RenderDeviceDriver* pDriver =
-      new CFX_QuartzDeviceDriver(m_pContext, nDeviceClass);
-  SetDeviceDriver(pDriver);
+  SetDeviceDriver(
+      WrapUnique(new CFX_QuartzDeviceDriver(m_pContext, nDeviceClass)));
   return TRUE;
 }
+
 FX_BOOL CFX_QuartzDevice::Attach(CFX_DIBitmap* pBitmap) {
   SetBitmap(pBitmap);
   m_pContext = createContextWithBitmap(pBitmap);
   if (!m_pContext)
     return FALSE;
 
-  IFX_RenderDeviceDriver* pDriver =
-      new CFX_QuartzDeviceDriver(m_pContext, FXDC_DISPLAY);
-  SetDeviceDriver(pDriver);
+  SetDeviceDriver(
+      WrapUnique(new CFX_QuartzDeviceDriver(m_pContext, FXDC_DISPLAY)));
   return TRUE;
 }
+
 FX_BOOL CFX_QuartzDevice::Create(int32_t width,
                                  int32_t height,
                                  FXDIB_Format format) {
   if ((uint8_t)format < 32) {
     return FALSE;
   }
-  CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
-  if (!pBitmap->Create(width, height, format)) {
-    delete pBitmap;
+  std::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap);
+  if (!pBitmap->Create(width, height, format))
     return FALSE;
-  }
   m_bOwnedBitmap = TRUE;
-  return Attach(pBitmap);
+  return Attach(pBitmap.release());
 }
 #endif  // _FXM_PLATFORM_  == _FXM_PLATFORM_APPLE_
diff --git a/core/fxge/dib/fx_dib_main.cpp b/core/fxge/dib/fx_dib_main.cpp
index b977a62..4c294ad 100644
--- a/core/fxge/dib/fx_dib_main.cpp
+++ b/core/fxge/dib/fx_dib_main.cpp
@@ -6,8 +6,8 @@
 
 #include "core/fxge/include/fx_dib.h"
 
-#include <algorithm>
 #include <limits.h>
+#include <algorithm>
 
 #include "core/fxcodec/include/fx_codec.h"
 #include "core/fxge/dib/dib_int.h"
@@ -1459,36 +1459,28 @@
 }
 
 CFX_DIBExtractor::CFX_DIBExtractor(const CFX_DIBSource* pSrc) {
-  m_pBitmap = nullptr;
   if (pSrc->GetBuffer()) {
-    m_pBitmap = new CFX_DIBitmap;
+    m_pBitmap.reset(new CFX_DIBitmap);
     if (!m_pBitmap->Create(pSrc->GetWidth(), pSrc->GetHeight(),
                            pSrc->GetFormat(), pSrc->GetBuffer())) {
-      delete m_pBitmap;
-      m_pBitmap = nullptr;
+      m_pBitmap.reset();
       return;
     }
     m_pBitmap->CopyPalette(pSrc->GetPalette());
     m_pBitmap->CopyAlphaMask(pSrc->m_pAlphaMask);
   } else {
-    m_pBitmap = pSrc->Clone();
+    m_pBitmap.reset(pSrc->Clone());
   }
 }
 
-CFX_DIBExtractor::~CFX_DIBExtractor() {
-  delete m_pBitmap;
-}
+CFX_DIBExtractor::~CFX_DIBExtractor() {}
 
-CFX_FilteredDIB::CFX_FilteredDIB() {
-  m_pScanline = nullptr;
-  m_pSrc = nullptr;
-}
+CFX_FilteredDIB::CFX_FilteredDIB() : m_pSrc(nullptr) {}
 
 CFX_FilteredDIB::~CFX_FilteredDIB() {
   if (m_bAutoDropSrc) {
     delete m_pSrc;
   }
-  FX_Free(m_pScanline);
 }
 
 void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc) {
@@ -1501,12 +1493,12 @@
   m_AlphaFlag = (uint8_t)(format >> 8);
   m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4;
   m_pPalette.reset(GetDestPalette());
-  m_pScanline = FX_Alloc(uint8_t, m_Pitch);
+  m_Scanline.resize(m_Pitch);
 }
 
 const uint8_t* CFX_FilteredDIB::GetScanline(int line) const {
-  TranslateScanline(m_pScanline, m_pSrc->GetScanline(line));
-  return m_pScanline;
+  TranslateScanline(m_pSrc->GetScanline(line), &m_Scanline);
+  return m_Scanline.data();
 }
 
 void CFX_FilteredDIB::DownSampleScanline(int line,
@@ -1523,14 +1515,11 @@
 
 CFX_ImageRenderer::CFX_ImageRenderer() {
   m_Status = 0;
-  m_pTransformer = nullptr;
   m_bRgbByteOrder = FALSE;
   m_BlendType = FXDIB_BLEND_NORMAL;
 }
 
-CFX_ImageRenderer::~CFX_ImageRenderer() {
-  delete m_pTransformer;
-}
+CFX_ImageRenderer::~CFX_ImageRenderer() {}
 
 FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice,
                                  const CFX_ClipRgn* pClipRgn,
@@ -1587,8 +1576,8 @@
       return TRUE;
     }
     m_Status = 2;
-    m_pTransformer =
-        new CFX_ImageTransformer(pSource, &m_Matrix, dib_flags, &m_ClipBox);
+    m_pTransformer.reset(
+        new CFX_ImageTransformer(pSource, &m_Matrix, dib_flags, &m_ClipBox));
     m_pTransformer->Start();
     return TRUE;
   }
diff --git a/core/fxge/ge/fx_ge_device.cpp b/core/fxge/ge/fx_ge_device.cpp
index 9bb950b..571f90c 100644
--- a/core/fxge/ge/fx_ge_device.cpp
+++ b/core/fxge/ge/fx_ge_device.cpp
@@ -17,21 +17,13 @@
       m_Height(0),
       m_bpp(0),
       m_RenderCaps(0),
-      m_DeviceClass(0),
-      m_pDeviceDriver(nullptr) {}
+      m_DeviceClass(0) {}
 
-CFX_RenderDevice::~CFX_RenderDevice() {
-  delete m_pDeviceDriver;
-}
+CFX_RenderDevice::~CFX_RenderDevice() {}
 
-void CFX_RenderDevice::Flush() {
-  delete m_pDeviceDriver;
-  m_pDeviceDriver = nullptr;
-}
-
-void CFX_RenderDevice::SetDeviceDriver(IFX_RenderDeviceDriver* pDriver) {
-  delete m_pDeviceDriver;
-  m_pDeviceDriver = pDriver;
+void CFX_RenderDevice::SetDeviceDriver(
+    std::unique_ptr<IFX_RenderDeviceDriver> pDriver) {
+  m_pDeviceDriver = std::move(pDriver);
   InitDeviceInfo();
 }
 
diff --git a/core/fxge/include/fx_dib.h b/core/fxge/include/fx_dib.h
index c2ca859..540996c 100644
--- a/core/fxge/include/fx_dib.h
+++ b/core/fxge/include/fx_dib.h
@@ -8,6 +8,7 @@
 #define CORE_FXGE_INCLUDE_FX_DIB_H_
 
 #include <memory>
+#include <vector>
 
 #include "core/fxcrt/include/fx_basic.h"
 #include "core/fxcrt/include/fx_coordinates.h"
@@ -381,10 +382,10 @@
   explicit CFX_DIBExtractor(const CFX_DIBSource* pSrc);
   ~CFX_DIBExtractor();
 
-  operator CFX_DIBitmap*() { return m_pBitmap; }
+  CFX_DIBitmap* GetBitmap() { return m_pBitmap.get(); }
 
  private:
-  CFX_DIBitmap* m_pBitmap;
+  std::unique_ptr<CFX_DIBitmap> m_pBitmap;
 };
 
 typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef;
@@ -399,8 +400,8 @@
 
   virtual uint32_t* GetDestPalette() = 0;
 
-  virtual void TranslateScanline(uint8_t* dest_buf,
-                                 const uint8_t* src_buf) const = 0;
+  virtual void TranslateScanline(const uint8_t* src_buf,
+                                 std::vector<uint8_t>* dest_buf) const = 0;
 
   virtual void TranslateDownSamples(uint8_t* dest_buf,
                                     const uint8_t* src_buf,
@@ -419,10 +420,8 @@
                           int clip_width) const override;
 
   const CFX_DIBSource* m_pSrc;
-
   FX_BOOL m_bAutoDropSrc;
-
-  uint8_t* m_pScanline;
+  mutable std::vector<uint8_t> m_Scanline;
 };
 
 class IFX_ScanlineComposer {
@@ -438,6 +437,7 @@
                           FXDIB_Format src_format,
                           uint32_t* pSrcPalette) = 0;
 };
+
 class CFX_ScanlineCompositor {
  public:
   CFX_ScanlineCompositor();
@@ -663,7 +663,7 @@
   int m_BitmapAlpha;
   uint32_t m_MaskColor;
   CFX_Matrix m_Matrix;
-  CFX_ImageTransformer* m_pTransformer;
+  std::unique_ptr<CFX_ImageTransformer> m_pTransformer;
   std::unique_ptr<CFX_ImageStretcher> m_Stretcher;
   CFX_BitmapComposer m_Composer;
   int m_Status;
diff --git a/core/fxge/include/fx_ge.h b/core/fxge/include/fx_ge.h
index dbc4fd0..aceaa76 100644
--- a/core/fxge/include/fx_ge.h
+++ b/core/fxge/include/fx_ge.h
@@ -214,9 +214,11 @@
   CFX_RenderDevice();
   virtual ~CFX_RenderDevice();
 
-  void Flush();
-  void SetDeviceDriver(IFX_RenderDeviceDriver* pDriver);
-  IFX_RenderDeviceDriver* GetDeviceDriver() const { return m_pDeviceDriver; }
+  // Take ownership of |pDriver|.
+  void SetDeviceDriver(std::unique_ptr<IFX_RenderDeviceDriver> pDriver);
+  IFX_RenderDeviceDriver* GetDeviceDriver() const {
+    return m_pDeviceDriver.get();
+  }
 
   FX_BOOL StartRendering();
   void EndRendering();
@@ -400,7 +402,7 @@
   int m_RenderCaps;
   int m_DeviceClass;
   FX_RECT m_ClipBox;
-  IFX_RenderDeviceDriver* m_pDeviceDriver;
+  std::unique_ptr<IFX_RenderDeviceDriver> m_pDeviceDriver;
 };
 
 class CFX_FxgeDevice : public CFX_RenderDevice {
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 55fe580..5f874e5 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -7,6 +7,7 @@
 #include <vector>
 
 #include "core/fxcodec/include/fx_codec.h"
+#include "core/fxcrt/include/fx_memory.h"
 
 #include "core/fpdfapi/fpdf_page/cpdf_shadingpattern.h"
 #include "core/fpdfapi/fpdf_page/pageint.h"
@@ -1461,8 +1462,7 @@
 }
 
 SkPictureRecorder* CFX_FxgeDevice::CreateRecorder(int size_x, int size_y) {
-  CFX_SkiaDeviceDriver* skDriver = new CFX_SkiaDeviceDriver(size_x, size_y);
-  SetDeviceDriver(skDriver);
+  SetDeviceDriver(WrapUnique(new CFX_SkiaDeviceDriver(size_x, size_y)));
   return skDriver->GetRecorder();
 }
 
@@ -1473,8 +1473,8 @@
   if (!pBitmap)
     return false;
   SetBitmap(pBitmap);
-  SetDeviceDriver(new CFX_SkiaDeviceDriver(pBitmap, bRgbByteOrder, pOriDevice,
-                                           bGroupKnockout));
+  SetDeviceDriver(WrapUnique(new CFX_SkiaDeviceDriver(
+      pBitmap, bRgbByteOrder, pOriDevice, bGroupKnockout)));
   return true;
 }
 
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index 0b08bba..78abd5d 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -14,6 +14,7 @@
 #include <crtdbg.h>
 
 #include "core/fxcodec/include/fx_codec.h"
+#include "core/fxcrt/include/fx_memory.h"
 
 #ifndef _SKIA_SUPPORT_
 #include "core/fxge/agg/fx_agg_driver.h"
@@ -1253,7 +1254,7 @@
     return SetDIBits(&bitmap, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL);
   }
   CFX_DIBExtractor temp(pSource);
-  CFX_DIBitmap* pBitmap = temp;
+  CFX_DIBitmap* pBitmap = temp.GetBitmap();
   if (!pBitmap)
     return FALSE;
   return GDI_SetDIBits(pBitmap, pSrcRect, left, top);
@@ -1335,7 +1336,7 @@
         (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
     if (pPlatform->m_GdiplusExt.IsAvailable() && !pSource->IsCmykImage()) {
       CFX_DIBExtractor temp(pSource);
-      CFX_DIBitmap* pBitmap = temp;
+      CFX_DIBitmap* pBitmap = temp.GetBitmap();
       if (!pBitmap)
         return FALSE;
       return pPlatform->m_GdiplusExt.StretchDIBits(
@@ -1346,7 +1347,7 @@
                                  dest_width, dest_height, pClipRect, flags);
   }
   CFX_DIBExtractor temp(pSource);
-  CFX_DIBitmap* pBitmap = temp;
+  CFX_DIBitmap* pBitmap = temp.GetBitmap();
   if (!pBitmap)
     return FALSE;
   return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width,
@@ -1364,7 +1365,7 @@
 }
 
 CFX_WindowsDevice::CFX_WindowsDevice(HDC hDC) {
-  SetDeviceDriver(CreateDriver(hDC));
+  SetDeviceDriver(WrapUnique(CreateDriver(hDC)));
 }
 
 CFX_WindowsDevice::~CFX_WindowsDevice() {}
@@ -1407,8 +1408,7 @@
   SetBitmap(pBitmap);
   m_hDC = ::CreateCompatibleDC(nullptr);
   m_hOldBitmap = (HBITMAP)SelectObject(m_hDC, m_hBitmap);
-  IFX_RenderDeviceDriver* pDriver = new CGdiDisplayDriver(m_hDC);
-  SetDeviceDriver(pDriver);
+  SetDeviceDriver(WrapUnique(new CGdiDisplayDriver(m_hDC)));
 }
 
 CFX_WinBitmapDevice::~CFX_WinBitmapDevice() {
diff --git a/core/fxge/win32/fx_win32_print.cpp b/core/fxge/win32/fx_win32_print.cpp
index e1071e7..9e19873 100644
--- a/core/fxge/win32/fx_win32_print.cpp
+++ b/core/fxge/win32/fx_win32_print.cpp
@@ -86,7 +86,7 @@
     return FALSE;
 
   CFX_DIBExtractor temp(pSource);
-  CFX_DIBitmap* pBitmap = temp;
+  CFX_DIBitmap* pBitmap = temp.GetBitmap();
   if (!pBitmap)
     return FALSE;
 
@@ -124,7 +124,7 @@
     }
 
     CFX_DIBExtractor temp(pSource);
-    CFX_DIBitmap* pBitmap = temp;
+    CFX_DIBitmap* pBitmap = temp.GetBitmap();
     if (!pBitmap)
       return FALSE;
     return GDI_StretchBitMask(pBitmap, dest_left, dest_top, dest_width,
@@ -150,7 +150,7 @@
   }
 
   CFX_DIBExtractor temp(pSource);
-  CFX_DIBitmap* pBitmap = temp;
+  CFX_DIBitmap* pBitmap = temp.GetBitmap();
   if (!pBitmap)
     return FALSE;
   return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width,
