Browse Source

cmCPackGeneratorFactory: rule of zero

Tushar Maheshwari 6 years ago
parent
commit
c9c1eb99fe

+ 6 - 19
Source/CPack/cmCPackGeneratorFactory.cxx

@@ -6,7 +6,6 @@
 #include <utility>
 
 #include "IFW/cmCPackIFWGenerator.h"
-#include "cmAlgorithms.h"
 #ifdef HAVE_FREEBSD_PKG
 #  include "cmCPackFreeBSDGenerator.h"
 #endif
@@ -138,33 +137,21 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory()
 #endif
 }
 
-cmCPackGeneratorFactory::~cmCPackGeneratorFactory()
-{
-  cmDeleteAll(this->Generators);
-}
-
-cmCPackGenerator* cmCPackGeneratorFactory::NewGenerator(
+std::unique_ptr<cmCPackGenerator> cmCPackGeneratorFactory::NewGenerator(
   const std::string& name)
 {
-  cmCPackGenerator* gen = this->NewGeneratorInternal(name);
+  auto it = this->GeneratorCreators.find(name);
+  if (it == this->GeneratorCreators.end()) {
+    return nullptr;
+  }
+  std::unique_ptr<cmCPackGenerator> gen(it->second());
   if (!gen) {
     return nullptr;
   }
-  this->Generators.push_back(gen);
   gen->SetLogger(this->Logger);
   return gen;
 }
 
-cmCPackGenerator* cmCPackGeneratorFactory::NewGeneratorInternal(
-  const std::string& name)
-{
-  auto it = this->GeneratorCreators.find(name);
-  if (it == this->GeneratorCreators.end()) {
-    return nullptr;
-  }
-  return (it->second)();
-}
-
 void cmCPackGeneratorFactory::RegisterGenerator(
   const std::string& name, const char* generatorDescription,
   CreateGeneratorCall* createGenerator)

+ 2 - 10
Source/CPack/cmCPackGeneratorFactory.h

@@ -6,8 +6,8 @@
 #include "cmConfigure.h" // IWYU pragma: keep
 
 #include <map>
+#include <memory>
 #include <string>
-#include <vector>
 
 class cmCPackGenerator;
 class cmCPackLog;
@@ -20,14 +20,9 @@ class cmCPackGeneratorFactory
 {
 public:
   cmCPackGeneratorFactory();
-  ~cmCPackGeneratorFactory();
-
-  cmCPackGeneratorFactory(const cmCPackGeneratorFactory&) = delete;
-  cmCPackGeneratorFactory& operator=(const cmCPackGeneratorFactory&) = delete;
 
   //! Get the generator
-  cmCPackGenerator* NewGenerator(const std::string& name);
-  void DeleteGenerator(cmCPackGenerator* gen);
+  std::unique_ptr<cmCPackGenerator> NewGenerator(const std::string& name);
 
   using CreateGeneratorCall = cmCPackGenerator*();
 
@@ -44,9 +39,6 @@ public:
   }
 
 private:
-  cmCPackGenerator* NewGeneratorInternal(const std::string& name);
-  std::vector<cmCPackGenerator*> Generators;
-
   using t_GeneratorCreatorsMap = std::map<std::string, CreateGeneratorCall*>;
   t_GeneratorCreatorsMap GeneratorCreators;
   DescriptionsMap GeneratorDescriptions;

+ 3 - 2
Source/CPack/cpack.cxx

@@ -25,6 +25,7 @@
 #include <cstddef>
 #include <iostream>
 #include <map>
+#include <memory>
 #include <sstream>
 #include <string>
 #include <utility>
@@ -237,7 +238,6 @@ int main(int argc, char const* const* argv)
 
   cmCPackGeneratorFactory generators;
   generators.SetLogger(&log);
-  cmCPackGenerator* cpackGenerator = nullptr;
 
   cmDocumentation doc;
   doc.addCPackStandardDocSections();
@@ -360,7 +360,8 @@ int main(int argc, char const* const* argv)
           parsed = 0;
         }
         if (parsed) {
-          cpackGenerator = generators.NewGenerator(gen);
+          std::unique_ptr<cmCPackGenerator> cpackGenerator =
+            generators.NewGenerator(gen);
           if (cpackGenerator) {
             cpackGenerator->SetTrace(trace);
             cpackGenerator->SetTraceExpand(traceExpand);