diff --git a/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc b/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc
index 3334e86..aaeebf3 100644
--- a/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc
+++ b/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc
@@ -17,20 +17,20 @@
   data += sizeof(wchar_t);
   size -= sizeof(wchar_t);
 
-  CFX_Barcode barcode;
-  if (!barcode.Create(type))
+  auto barcode = CFX_Barcode::Create(type);
+  if (!barcode)
     return 0;
 
   // TODO(tsepez): Setup more options from |data|.
-  barcode.SetModuleHeight(300);
-  barcode.SetModuleWidth(420);
-  barcode.SetHeight(298);
-  barcode.SetWidth(418);
+  barcode->SetModuleHeight(300);
+  barcode->SetModuleWidth(420);
+  barcode->SetHeight(298);
+  barcode->SetWidth(418);
 
   WideStringView content(reinterpret_cast<const wchar_t*>(data),
                          size / sizeof(wchar_t));
 
-  if (!barcode.Encode(content))
+  if (!barcode->Encode(content))
     return 0;
 
   // TODO(tsepez): Output to device.
diff --git a/xfa/fwl/cfwl_barcode.cpp b/xfa/fwl/cfwl_barcode.cpp
index f5d6ea9..74ac7dd 100644
--- a/xfa/fwl/cfwl_barcode.cpp
+++ b/xfa/fwl/cfwl_barcode.cpp
@@ -213,7 +213,5 @@
   if (m_pBarcodeEngine || m_type == BC_UNKNOWN)
     return;
 
-  auto pBarcode = pdfium::MakeUnique<CFX_Barcode>();
-  if (pBarcode->Create(m_type))
-    m_pBarcodeEngine = std::move(pBarcode);
+  m_pBarcodeEngine = CFX_Barcode::Create(m_type);
 }
diff --git a/xfa/fwl/cfx_barcode.cpp b/xfa/fwl/cfx_barcode.cpp
index 9d667c6..2d12536 100644
--- a/xfa/fwl/cfx_barcode.cpp
+++ b/xfa/fwl/cfx_barcode.cpp
@@ -59,9 +59,11 @@
 
 CFX_Barcode::~CFX_Barcode() {}
 
-bool CFX_Barcode::Create(BC_TYPE type) {
-  m_pBCEngine = CreateBarCodeEngineObject(type);
-  return !!m_pBCEngine;
+std::unique_ptr<CFX_Barcode> CFX_Barcode::Create(BC_TYPE type) {
+  auto barcodeEngine = CreateBarCodeEngineObject(type);
+  std::unique_ptr<CFX_Barcode> barcode(new CFX_Barcode());
+  barcode->m_pBCEngine.swap(barcodeEngine);
+  return barcode;
 }
 
 BC_TYPE CFX_Barcode::GetType() {
diff --git a/xfa/fwl/cfx_barcode.h b/xfa/fwl/cfx_barcode.h
index eec4648..a5f0513 100644
--- a/xfa/fwl/cfx_barcode.h
+++ b/xfa/fwl/cfx_barcode.h
@@ -22,10 +22,9 @@
 
 class CFX_Barcode {
  public:
-  CFX_Barcode();
   ~CFX_Barcode();
 
-  bool Create(BC_TYPE type);
+  static std::unique_ptr<CFX_Barcode> Create(BC_TYPE type);
   BC_TYPE GetType();
   bool Encode(const WideStringView& contents);
 
@@ -56,6 +55,8 @@
   bool SetTruncated(bool truncated);
 
  private:
+  CFX_Barcode();
+
   std::unique_ptr<CBC_CodeBase> m_pBCEngine;
 };
 
diff --git a/xfa/fwl/cfx_barcode_unittest.cpp b/xfa/fwl/cfx_barcode_unittest.cpp
index fe8aee4..585d92f 100644
--- a/xfa/fwl/cfx_barcode_unittest.cpp
+++ b/xfa/fwl/cfx_barcode_unittest.cpp
@@ -20,7 +20,6 @@
  public:
   void SetUp() override {
     BC_Library_Init();
-    barcode_ = pdfium::MakeUnique<CFX_Barcode>();
 
     auto device = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
     auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
@@ -41,7 +40,8 @@
   CFX_Barcode* barcode() const { return barcode_.get(); }
 
   bool Create(BC_TYPE type) {
-    if (!barcode_->Create(type))
+    barcode_ = CFX_Barcode::Create(type);
+    if (!barcode_)
       return false;
 
     barcode_->SetModuleHeight(300);
