lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 98a214c 01/14: Rule of three <<< five < zero


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 98a214c 01/14: Rule of three <<< five < zero
Date: Thu, 1 Apr 2021 18:15:16 -0400 (EDT)

branch: master
commit 98a214c2a5418a7d5ccb8889d88b884d8bab27e9
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Rule of three <<< five < zero
    
    This class has const data members, so copy and move assignment are
    implicitly deleted. The rule of zero works well nevertheless: it
    defines all special member functions as defaulted, and it defines
    defaulted assignment operators as deleted where necessary.
    
    Specifying five special member functions explicitly is not usually
    necessary. Specifying three and relying on implicit rules to delete
    certain others seems quirky.
---
 i7702.hpp      | 4 ----
 i7702_test.cpp | 7 +++++++
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/i7702.hpp b/i7702.hpp
index 9e05c57..4b739ca 100644
--- a/i7702.hpp
+++ b/i7702.hpp
@@ -41,10 +41,6 @@ class LMI_SO i7702 final
         ,stratified_charges const&
         );
 
-    i7702(i7702 const&) = delete;
-    i7702& operator=(i7702 const&) = delete;
-    ~i7702() = default;
-
     std::vector<double> const& ic_usual() const {return ic_usual_;}
     std::vector<double> const& ic_glp  () const {return ic_glp_  ;}
     std::vector<double> const& ic_gsp  () const {return ic_gsp_  ;}
diff --git a/i7702_test.cpp b/i7702_test.cpp
index ff052db..40e0cca 100644
--- a/i7702_test.cpp
+++ b/i7702_test.cpp
@@ -71,6 +71,13 @@ void i7702_test::test0()
     LMI_TEST(materially_equal(0.00327373978219886374239, z.ig_usual()[0]));
 
     std::cout<< std::setprecision(DECIMAL_DIG) << z.ig_usual()[0] << std::endl;
+
+    // Class i7702 is copy- and move-constructible, but not assignable
+    // because of const data members.
+    i7702 x = z;
+    i7702 y = std::move(z);
+//  x = y;            // operator=(i7702 const&) implicitly deleted
+//  x = std::move(y); // operator=(i7702&&)      implicitly deleted
 }
 
 void i7702_test::test1()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]