changeset 24253:cf15cb87bad9

use shared_ptr to manage thread_manager object * thread_manager.h (octave_base_thread_manager::count): Delete data member and all uses. (class octave_base_thread_manager, class octave_thread_manager): Use default constructor and destructor methods where possible. (octave_thread_manager::m_rep): Manage with shared_ptr.
author John W. Eaton <jwe@octave.org>
date Wed, 15 Nov 2017 14:38:31 -0500
parents f8c263f961c1
children 4bca68f0d8d5
files libgui/src/thread-manager.h
diffstat 1 files changed, 7 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/thread-manager.h	Wed Nov 15 14:21:52 2017 -0500
+++ b/libgui/src/thread-manager.h	Wed Nov 15 14:38:31 2017 -0500
@@ -25,7 +25,7 @@
 
 #include "octave-config.h"
 
-#include "oct-refcount.h"
+#include <memory>
 
 class octave_base_thread_manager
 {
@@ -33,21 +33,15 @@
 
   friend class octave_thread_manager;
 
-  octave_base_thread_manager (void) : m_count (1) { }
+  octave_base_thread_manager (void) = default;
 
-  octave_base_thread_manager (const octave_base_thread_manager&)
-    : m_count (1)
-  { }
+  octave_base_thread_manager (const octave_base_thread_manager&) = default;
 
   virtual ~octave_base_thread_manager (void) = default;
 
   virtual void register_current_thread (void) = 0;
 
   virtual void interrupt (void) = 0;
-
-protected:
-
-  octave::refcount<int> m_count;
 };
 
 class octave_thread_manager
@@ -56,27 +50,11 @@
 
   octave_thread_manager (void);
 
-  ~octave_thread_manager (void)
-  {
-    if (--m_rep->m_count == 0)
-      delete m_rep;
-  }
-
-  octave_thread_manager (const octave_thread_manager& tm) : m_rep (tm.m_rep) { }
+  ~octave_thread_manager (void) = default;
 
-  octave_thread_manager& operator = (const octave_thread_manager& tm)
-  {
-    if (m_rep != tm.m_rep)
-      {
-        if (--m_rep->m_count == 0)
-          delete m_rep;
+  octave_thread_manager (const octave_thread_manager& tm) = default;
 
-        m_rep = tm.m_rep;
-        m_rep->m_count++;
-      }
-
-    return *this;
-  }
+  octave_thread_manager& operator = (const octave_thread_manager& tm) = default;
 
   void register_current_thread (void) { m_rep->register_current_thread (); }
 
@@ -88,7 +66,7 @@
 
 private:
 
-  octave_base_thread_manager *m_rep;
+  std::shared_ptr<octave_base_thread_manager> m_rep;
 
   static octave_base_thread_manager * create_rep (void);
 };