Simplify memory management for per isolate data

Use smart pointers for FXJS_PerIsolateData owned member variables. Also
move creation and deletion of dynamic object map into
FXJS_PerIsolateData's constructor and destructor. Overall, the
interfaces and memory management should be simpler.

BUG=pdfium:518

Review-Url: https://codereview.chromium.org/2358343002
diff --git a/fxjs/include/fxjs_v8.h b/fxjs/include/fxjs_v8.h
index 8b5fc83..c87d8a5 100644
--- a/fxjs/include/fxjs_v8.h
+++ b/fxjs/include/fxjs_v8.h
@@ -100,23 +100,14 @@
   static void SetUp(v8::Isolate* pIsolate);
   static FXJS_PerIsolateData* Get(v8::Isolate* pIsolate);
 
-  void CreateDynamicObjsMap(v8::Isolate* pIsolate) {
-    if (!m_pDynamicObjsMap)
-      m_pDynamicObjsMap = new V8TemplateMap(pIsolate);
-  }
-  void ReleaseDynamicObjsMap() {
-    delete m_pDynamicObjsMap;
-    m_pDynamicObjsMap = nullptr;
-  }
-
-  std::vector<CFXJS_ObjDefinition*> m_ObjectDefnArray;
+  std::vector<std::unique_ptr<CFXJS_ObjDefinition>> m_ObjectDefnArray;
 #ifdef PDF_ENABLE_XFA
   std::unique_ptr<CFXJSE_RuntimeData> m_pFXJSERuntimeData;
 #endif  // PDF_ENABLE_XFA
-  V8TemplateMap* m_pDynamicObjsMap;
+  std::unique_ptr<V8TemplateMap> m_pDynamicObjsMap;
 
  protected:
-  FXJS_PerIsolateData();
+  explicit FXJS_PerIsolateData(v8::Isolate* pIsolate);
 };
 
 class FXJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {