changeset 25321:089852fc8929

use explict default and deleted ctors and dtors for classdef classes * ov-classdef.h, ov-classdef.cc: Use explicit default constructors, destructors, and operator= methods for classdef classes. Use C++11 syntax instead of private methods.
author John W. Eaton <jwe@octave.org>
date Fri, 27 Apr 2018 09:48:42 -0400
parents 2ad00275b79b
children 5c1dcc504c62
files libinterp/octave-value/ov-classdef.cc libinterp/octave-value/ov-classdef.h
diffstat 2 files changed, 61 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-classdef.cc	Thu Apr 26 21:58:16 2018 -0400
+++ b/libinterp/octave-value/ov-classdef.cc	Fri Apr 27 09:48:42 2018 -0400
@@ -1058,6 +1058,10 @@
   octave_classdef_meta (const cdef_meta_object& obj)
     : object (obj) { }
 
+  octave_classdef_meta (const octave_classdef_meta&) = delete;
+
+  octave_classdef_meta& operator = (const octave_classdef_meta&) = delete;
+
   ~octave_classdef_meta (void)
   { object.meta_release (); }
 
@@ -1119,9 +1123,15 @@
 class octave_classdef_superclass_ref : public octave_function
 {
 public:
+  octave_classdef_superclass_ref (void) = delete;
+
   octave_classdef_superclass_ref (const octave_value_list& a)
     : octave_function (), args (a) { }
 
+  octave_classdef_superclass_ref (const octave_classdef_superclass_ref&) = delete;
+
+  octave_classdef_superclass_ref& operator = (const octave_classdef_superclass_ref&) = delete;
+
   ~octave_classdef_superclass_ref (void) = default;
 
   bool is_classdef_superclass_ref (void) const { return true; }
@@ -1909,9 +1919,17 @@
 class ctor_analyzer : public octave::tree_walker
 {
 public:
+  ctor_analyzer (void) = delete;
+
   ctor_analyzer (const std::string& ctor, const std::string& obj)
     : octave::tree_walker (), who (ctor), obj_name (obj) { }
 
+  ctor_analyzer (const ctor_analyzer&) = delete;
+
+  ctor_analyzer& operator = (const ctor_analyzer&) = delete;
+
+  ~ctor_analyzer (void) = default;
+
   void visit_statement_list (octave::tree_statement_list& t)
   {
     for (const auto& stmt_p : t)
--- a/libinterp/octave-value/ov-classdef.h	Thu Apr 26 21:58:16 2018 -0400
+++ b/libinterp/octave-value/ov-classdef.h	Fri Apr 27 09:48:42 2018 -0400
@@ -342,6 +342,8 @@
     register_object ();
   }
 
+  cdef_object_base& operator = (const cdef_object_base&) = delete;
+
   ~cdef_object_base (void) { unregister_object (); }
 
   cdef_class get_class (void) const;
@@ -368,9 +370,6 @@
 
   // The class of the object
   cdef_object klass;
-
-  // No assignment!
-  cdef_object_base& operator = (const cdef_object_base&);
 };
 
 class
@@ -382,6 +381,10 @@
   cdef_object_array (const Array<cdef_object>& a)
     : cdef_object_base (), array (a) { }
 
+  cdef_object_array& operator = (const cdef_object_array&) = delete;
+
+  ~cdef_object_array (void) = default;
+
   cdef_object_rep * clone (void) const
   { return new cdef_object_array (*this); }
 
@@ -428,9 +431,6 @@
   // Private copying!
   cdef_object_array (const cdef_object_array& obj)
     : cdef_object_base (obj), array (obj.array) { }
-
-  // No assignment!
-  cdef_object_array& operator = (const cdef_object_array&);
 };
 
 class
@@ -439,6 +439,8 @@
 public:
   cdef_object_scalar (void) : cdef_object_base () { }
 
+  cdef_object_scalar& operator = (const cdef_object_scalar&) = delete;
+
   ~cdef_object_scalar (void) = default;
 
   dim_vector dims (void) const { return dim_vector (1, 1); }
@@ -506,10 +508,6 @@
   // Restricted object copying!
   cdef_object_scalar (const cdef_object_scalar& obj)
     : cdef_object_base (obj), map (obj.map), ctor_list (obj.ctor_list) { }
-
-private:
-  // No assignment!
-  cdef_object_scalar& operator = (const cdef_object_scalar&);
 };
 
 class
@@ -519,6 +517,8 @@
   handle_cdef_object (void)
     : cdef_object_scalar () { }
 
+  handle_cdef_object& operator = (const handle_cdef_object&) = delete;
+
   ~handle_cdef_object (void);
 
   cdef_object_rep * clone (void) const
@@ -539,10 +539,6 @@
   // Restricted copying!
   handle_cdef_object (const handle_cdef_object& obj)
     : cdef_object_scalar (obj) { }
-
-private:
-  // No assignment
-  handle_cdef_object& operator = (const handle_cdef_object&);
 };
 
 class
@@ -552,6 +548,8 @@
   value_cdef_object (void)
     : cdef_object_scalar () { }
 
+  value_cdef_object& operator = (const value_cdef_object&) = delete;
+
   ~value_cdef_object (void);
 
   cdef_object_rep * clone (void) const
@@ -567,9 +565,6 @@
   // Private copying!
   value_cdef_object (const value_cdef_object& obj)
     : cdef_object_scalar (obj) { }
-
-  // No assignment!
-  value_cdef_object& operator = (const value_cdef_object&);
 };
 
 class
@@ -579,6 +574,8 @@
   cdef_meta_object_rep (void)
     : handle_cdef_object () { }
 
+  cdef_meta_object_rep& operator = (const cdef_meta_object_rep&) = delete;
+
   ~cdef_meta_object_rep (void) = default;
 
   cdef_object_rep * copy (void) const
@@ -611,10 +608,6 @@
   // Restricted copying!
   cdef_meta_object_rep (const cdef_meta_object_rep& obj)
     : handle_cdef_object (obj) { }
-
-private:
-  // No assignment!
-  cdef_meta_object_rep& operator = (const cdef_meta_object_rep&);
 };
 
 class
@@ -634,6 +627,8 @@
   cdef_meta_object (const cdef_object& obj)
     : cdef_object (obj) { }
 
+  cdef_meta_object& operator = (const cdef_object&) = delete;
+
   ~cdef_meta_object (void) = default;
 
   bool is_class (void) const { return get_rep ()->is_class (); }
@@ -678,6 +673,10 @@
 
     cdef_class_rep (const std::list<cdef_class>& superclasses);
 
+    cdef_class_rep& operator = (const cdef_class_rep&) = delete;
+
+    ~cdef_class_rep (void) = default;
+
     cdef_object_rep * copy (void) const { return new cdef_class_rep (*this); }
 
     bool is_class (void) const { return true; }
@@ -847,6 +846,8 @@
     return *this;
   }
 
+  ~cdef_class (void) = default;
+
   cdef_method find_method (const std::string& nm, bool local = false);
 
   void install_method (const cdef_method& meth)
@@ -992,6 +993,10 @@
     cdef_property_rep (void)
       : cdef_meta_object_rep () { }
 
+    cdef_property_rep& operator = (const cdef_property_rep& p) = delete;
+
+    ~cdef_property_rep (void) = default;
+
     cdef_object_rep * copy (void) const { return new cdef_property_rep (*this); }
 
     bool is_property (void) const { return true; }
@@ -1056,6 +1061,8 @@
     return *this;
   }
 
+  ~cdef_property (void) = default;
+
   octave_value get_value (const cdef_object& obj, bool do_check_access = true,
                           const std::string& who = "")
   { return get_rep ()->get_value (obj, do_check_access, who); }
@@ -1102,6 +1109,10 @@
       : cdef_meta_object_rep (), function (), dispatch_type ()
     { }
 
+    cdef_method_rep& operator = (const cdef_method_rep& m) = delete;
+
+    ~cdef_method_rep (void) = default;
+
     cdef_object_rep * copy (void) const { return new cdef_method_rep(*this); }
 
     bool is_method (void) const { return true; }
@@ -1188,6 +1199,8 @@
     return *this;
   }
 
+  ~cdef_method (void) = default;
+
   // normal invocation
   octave_value_list execute (const octave_value_list& args, int nargout,
                              bool do_check_access = true,
@@ -1316,6 +1329,8 @@
     cdef_package_rep (void)
       : cdef_meta_object_rep (), member_count (0) { }
 
+    cdef_package_rep& operator = (const cdef_package_rep&) = delete;
+
     ~cdef_package_rep (void) = default;
 
     cdef_object_rep * copy (void) const { return new cdef_package_rep (*this); }
@@ -1422,6 +1437,8 @@
     return *this;
   }
 
+  ~cdef_package (void) = default;
+
   void install_class (const cdef_class& cls, const std::string& nm)
   { get_rep ()->install_class (cls, nm); }
 
@@ -1464,8 +1481,11 @@
   octave_classdef (const cdef_object& obj)
     : octave_base_value (), object (obj) { }
 
-  octave_classdef (const octave_classdef& obj)
-    : octave_base_value (obj), object (obj.object) { }
+  octave_classdef (const octave_classdef&) = delete;
+
+  octave_classdef& operator = (const octave_classdef&) = delete;
+
+  ~octave_classdef (void) = default;
 
   octave_base_value * clone (void) const
   { return new octave_classdef (object.clone ()); }