]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Make code easier to read by moving a condition outward.
authorWolfgang Bangerth <bangerth@colostate.edu>
Tue, 6 Aug 2024 16:27:40 +0000 (10:27 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Sat, 10 Aug 2024 03:57:21 +0000 (21:57 -0600)
include/deal.II/base/smartpointer.h

index 4c097cedc846a56822766ea429327f697b20aa83..34c74b126db7eb75fdd6b59db1030c6ab0a932ba 100644 (file)
@@ -329,12 +329,18 @@ inline SmartPointer<T, P>::SmartPointer(SmartPointer<T, P> &&tt) noexcept
   , id(tt.id)
   , pointed_to_object_is_alive(false)
 {
-  if (tt.pointed_to_object_is_alive && t != nullptr)
-    t->subscribe(&pointed_to_object_is_alive, id);
+  if (tt != nullptr)
+    {
+      Assert(tt.pointed_to_object_is_alive,
+             ExcMessage("You can't move a smart pointer object that "
+                        "is pointing to an object that is no longer alive."));
+
+      t->subscribe(&pointed_to_object_is_alive, id);
 
-  // Release the rhs object as if we had moved all members away from
-  // it directly:
-  tt = nullptr;
+      // Release the rhs object as if we had moved all members away from
+      // it directly:
+      tt = nullptr;
+    }
 }
 
 
@@ -437,23 +443,24 @@ template <typename T, typename P>
 inline SmartPointer<T, P> &
 SmartPointer<T, P>::operator=(SmartPointer<T, P> &&tt) noexcept
 {
+  if (tt == nullptr)
+    {
+      *this = nullptr;
+    }
   // if objects on the left and right hand side of the operator= are
   // the same, then this is a no-op
-  if (&tt != this)
+  else if (&tt != this)
     {
       // Let us unsubscribe from the current object
-      if (pointed_to_object_is_alive && t != nullptr)
+      if (pointed_to_object_is_alive)
         t->unsubscribe(&pointed_to_object_is_alive, id);
 
-      // Then reset to the new object, and subscribe to it, assuming
-      // that the the rhs points to anything in the first place:
-      if (tt.pointed_to_object_is_alive && tt != nullptr)
-        {
-          t = tt.get();
-          t->subscribe(&pointed_to_object_is_alive, id);
-        }
-      else
-        t = nullptr;
+      // Then reset to the new object, and subscribe to it:
+      Assert(tt.pointed_to_object_is_alive,
+             ExcMessage("You can't move a smart pointer object that "
+                        "is pointing to an object that is no longer alive."));
+      t = tt.get();
+      t->subscribe(&pointed_to_object_is_alive, id);
 
       // Finally release the rhs object since we moved its contents
       tt = nullptr;

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.