Adding destructors for CDO an CDOhash_map in the restore() functions.
authorTim King <taking@google.com>
Fri, 4 Dec 2015 23:58:19 +0000 (15:58 -0800)
committerTim King <taking@google.com>
Tue, 15 Dec 2015 22:54:52 +0000 (14:54 -0800)
src/context/cdhashmap.h
src/context/cdo.h

index 51fd3b411ccc6b908d769aa6fa53c14611bbca12..0eb1d03c986ed883e75fe533966134a2a9709da2 100644 (file)
@@ -128,8 +128,8 @@ class CDOhash_map : public ContextObj {
   }
 
   virtual void restore(ContextObj* data) {
+    CDOhash_map* p = static_cast<CDOhash_map*>(data);
     if(d_map != NULL) {
-      CDOhash_map* p = static_cast<CDOhash_map*>(data);
       if(p->d_map == NULL) {
         Assert(d_map->d_map.find(d_key) != d_map->d_map.end() &&
                (*d_map->d_map.find(d_key)).second == this);
@@ -163,6 +163,10 @@ class CDOhash_map : public ContextObj {
         d_data = p->d_data;
       }
     }
+    // Explicitly call destructors fro the key and the date as they will not
+    // otherwise get called.
+    p->d_key.~Key();
+    p->d_data.~Data();
   }
 
   /** ensure copy ctor is only called by us */
index 486626ae5eb7444d32ffc78939260383a56628ab..860648b27ae323476a2deb5a221406d6813ef4fb 100644 (file)
@@ -70,8 +70,11 @@ protected:
    */
   virtual void restore(ContextObj* pContextObj) {
     //Debug("context") << "restore cdo " << this;
-    d_data = ((CDO<T>*) pContextObj)->d_data;
+    CDO<T>* p = static_cast<CDO<T>*>(pContextObj);
+    d_data = p->d_data;
     //Debug("context") << " to " << get() << std::endl;
+    // Explicitly call destructor as it will not otherwise get called.
+    p->d_data.~T();
   }
 
 public: