Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use default initialization.
[simgrid.git] / include / xbt / Extendable.hpp
index d90314d..5acaebe 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015. The SimGrid Team.
+/* Copyright (c) 2015-2019. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@ class Extension {
   static const std::size_t INVALID_ID = std::numeric_limits<std::size_t>::max();
   std::size_t id_;
   friend class Extendable<T>;
-  constexpr Extension(std::size_t id) : id_(id) {}
+  explicit constexpr Extension(std::size_t id) : id_(id) {}
 public:
   explicit constexpr Extension() : id_(INVALID_ID) {}
   std::size_t id() const { return id_; }
@@ -48,7 +48,6 @@ template<class T>
 class Extendable {
 private:
   static std::vector<void(*)(void*)> deleters_;
-protected:
   std::vector<void*> extensions_;
 public:
   static size_t extension_create(void (*deleter)(void*))
@@ -65,9 +64,11 @@ public:
   template<class U> static
   Extension<T,U> extension_create()
   {
-    return extension_create([](void* p){ delete static_cast<U*>(p); });
+    return Extension<T, U>(extension_create([](void* p) { delete static_cast<U*>(p); }));
   }
   Extendable() : extensions_(deleters_.size(), nullptr) {}
+  Extendable(const Extendable&) = delete;
+  Extendable& operator=(const Extendable&) = delete;
   ~Extendable()
   {
     /* Call destructors in reverse order of their registrations
@@ -116,9 +117,7 @@ public:
   template<class U> void extension_set(U* p) { extension_set<U>(U::EXTENSION_ID, p); }
 };
 
-template<class T>
-std::vector<void(*)(void*)> Extendable<T>::deleters_ = {};
-
+template <class T> std::vector<void (*)(void*)> Extendable<T>::deleters_;
 }
 }