fixes memory leak in facade chewing table
authorPeng Wu <alexepico@gmail.com>
Thu, 11 Oct 2012 05:47:31 +0000 (13:47 +0800)
committerPeng Wu <alexepico@gmail.com>
Thu, 11 Oct 2012 05:47:31 +0000 (13:47 +0800)
src/storage/facade_chewing_table.h

index da740c4..50683eb 100644 (file)
@@ -39,6 +39,17 @@ private:
     ChewingLargeTable * m_system_chewing_table;
     ChewingLargeTable * m_user_chewing_table;
 
+    void reset() {
+        if (m_system_chewing_table) {
+            delete m_system_chewing_table;
+            m_system_chewing_table = NULL;
+        }
+
+        if (m_user_chewing_table) {
+            delete m_user_chewing_table;
+            m_user_chewing_table = NULL;
+        }
+    }
 public:
     /**
      * FacadeChewingTable::FacadeChewingTable:
@@ -52,6 +63,16 @@ public:
     }
 
     /**
+     * FacadeChewingTable::~FacadeChewingTable:
+     *
+     * The destructor of the FacadeChewingTable.
+     *
+     */
+    ~FacadeChewingTable() {
+        reset();
+    }
+
+    /**
      * FacadeChewingTable::set_options:
      * @options: the pinyin options.
      * @returns: whether the setting options is successful.
@@ -80,6 +101,8 @@ public:
      */
     bool load(pinyin_option_t options, MemoryChunk * system,
               MemoryChunk * user){
+        reset();
+
         bool result = false;
         if (system) {
             m_system_chewing_table = new ChewingLargeTable(options);