# HG changeset patch # User John W. Eaton # Date 1524836922 14400 # Node ID 089852fc89294da98dd6d46c5aedef0302ab8acc # Parent 2ad00275b79b69aa0b70283354d2fdec2c00d980 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. diff -r 2ad00275b79b -r 089852fc8929 libinterp/octave-value/ov-classdef.cc --- 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) diff -r 2ad00275b79b -r 089852fc8929 libinterp/octave-value/ov-classdef.h --- 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& 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& 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 ()); }