Browse Source

any: review/cleanup constructors

Michele Caini 1 year ago
parent
commit
f8336ba5a1
1 changed files with 15 additions and 16 deletions
  1. 15 16
      src/entt/core/any.hpp

+ 15 - 16
src/entt/core/any.hpp

@@ -145,8 +145,8 @@ class basic_any {
     basic_any(const basic_any &other, const any_policy pol) noexcept
         : instance{other.data()},
           info{other.info},
-          vtable{other.vtable},
-          mode{pol} {}
+          mode{pol},
+          vtable{other.vtable} {}
 
 public:
     /*! @brief Size of the internal storage. */
@@ -156,7 +156,7 @@ public:
 
     /*! @brief Default constructor. */
     constexpr basic_any() noexcept
-        : basic_any{std::in_place_type<void>} {}
+        : instance{} {}
 
     /**
      * @brief Constructs a wrapper by directly initializing the new object.
@@ -166,10 +166,7 @@ public:
      */
     template<typename Type, typename... Args>
     explicit basic_any(std::in_place_type_t<Type>, Args &&...args)
-        : instance{},
-          info{},
-          vtable{},
-          mode{any_policy::owner} {
+        : instance{} {
         initialize<Type>(std::forward<Args>(args)...);
     }
 
@@ -180,14 +177,16 @@ public:
      */
     template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::decay_t<Type>, basic_any>>>
     basic_any(Type &&value)
-        : basic_any{std::in_place_type<std::decay_t<Type>>, std::forward<Type>(value)} {}
+        : instance{} {
+        initialize<std::decay_t<Type>>(std::forward<Type>(value));
+    }
 
     /**
      * @brief Copy constructor.
      * @param other The instance to copy from.
      */
     basic_any(const basic_any &other)
-        : basic_any{} {
+        : instance{} {
         if(other.vtable) {
             other.vtable(operation::copy, other, this);
         }
@@ -200,8 +199,8 @@ public:
     basic_any(basic_any &&other) noexcept
         : instance{},
           info{other.info},
-          vtable{other.vtable},
-          mode{other.mode} {
+          mode{other.mode},
+          vtable{other.vtable} {
         if(other.vtable) {
             other.vtable(operation::move, other, this);
         }
@@ -240,8 +239,8 @@ public:
         if(other.vtable) {
             other.vtable(operation::move, other, this);
             info = other.info;
-            vtable = other.vtable;
             mode = other.mode;
+            vtable = other.vtable;
         }
 
         return *this;
@@ -348,8 +347,8 @@ public:
         // unnecessary but it helps to detect nasty bugs
         ENTT_ASSERT((instance = nullptr) == nullptr, "");
         info = &type_id<void>();
-        vtable = nullptr;
         mode = any_policy::owner;
+        vtable = nullptr;
     }
 
     /**
@@ -408,9 +407,9 @@ private:
         const void *instance;
         storage_type storage;
     };
-    const type_info *info;
-    vtable_type *vtable;
-    any_policy mode;
+    const type_info *info{&type_id<void>()};
+    any_policy mode{any_policy::owner};
+    vtable_type *vtable{};
 };
 
 /**