Index: clang-tidy/ClangTidyModule.h =================================================================== --- clang-tidy/ClangTidyModule.h +++ clang-tidy/ClangTidyModule.h @@ -74,13 +74,17 @@ /// this object. class ClangTidyCheckFactories { public: - ClangTidyCheckFactories() {} - ~ClangTidyCheckFactories(); - /// \brief Register \p Factory with the name \p Name. - /// - /// The \c ClangTidyCheckFactories object takes ownership of the \p Factory. - void addCheckFactory(StringRef Name, CheckFactoryBase *Factory); + void addCheckFactory(StringRef Name, + std::unique_ptr Factory); + + /// \brief Registers \c CheckType by adding a corresponding + /// \c ClangTidyCheckFactory. + template + void registerCheck(StringRef Name) { + addCheckFactory(Name, + llvm::make_unique>()); + } /// \brief Create instances of all checks matching \p CheckRegexString and /// store them in \p Checks. @@ -89,7 +93,7 @@ void createChecks(GlobList &Filter, std::vector> &Checks); - typedef std::map FactoryMap; + typedef std::map> FactoryMap; FactoryMap::const_iterator begin() const { return Factories.begin(); } FactoryMap::const_iterator end() const { return Factories.end(); } bool empty() const { return Factories.empty(); } Index: clang-tidy/ClangTidyModule.cpp =================================================================== --- clang-tidy/ClangTidyModule.cpp +++ clang-tidy/ClangTidyModule.cpp @@ -16,14 +16,9 @@ namespace clang { namespace tidy { -ClangTidyCheckFactories::~ClangTidyCheckFactories() { - for (const auto &Factory : Factories) - delete Factory.second; -} - -void ClangTidyCheckFactories::addCheckFactory(StringRef Name, - CheckFactoryBase *Factory) { - Factories[Name] = Factory; +void ClangTidyCheckFactories::addCheckFactory( + StringRef Name, std::unique_ptr Factory) { + Factories[Name] = std::move(Factory); } void ClangTidyCheckFactories::createChecks( Index: clang-tidy/google/GoogleTidyModule.cpp =================================================================== --- clang-tidy/google/GoogleTidyModule.cpp +++ clang-tidy/google/GoogleTidyModule.cpp @@ -29,36 +29,26 @@ class GoogleModule : public ClangTidyModule { public: void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { - CheckFactories.addCheckFactory( - "google-build-explicit-make-pair", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-build-namespaces", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-build-using-namespace", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-explicit-constructor", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-runtime-int", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-runtime-operator", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-runtime-member-string-references", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-runtime-memset", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-readability-casting", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "google-readability-function", - new ClangTidyCheckFactory()); + CheckFactories.registerCheck( + "google-build-explicit-make-pair"); + CheckFactories.registerCheck( + "google-build-namespaces"); + CheckFactories.registerCheck( + "google-build-using-namespace"); + CheckFactories.registerCheck( + "google-explicit-constructor"); + CheckFactories.registerCheck( + "google-runtime-int"); + CheckFactories.registerCheck( + "google-runtime-operator"); + CheckFactories.registerCheck( + "google-runtime-member-string-references"); + CheckFactories.registerCheck( + "google-runtime-memset"); + CheckFactories.registerCheck( + "google-readability-casting"); + CheckFactories.registerCheck( + "google-readability-function"); } }; Index: clang-tidy/llvm/LLVMTidyModule.cpp =================================================================== --- clang-tidy/llvm/LLVMTidyModule.cpp +++ clang-tidy/llvm/LLVMTidyModule.cpp @@ -21,16 +21,11 @@ class LLVMModule : public ClangTidyModule { public: void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { - CheckFactories.addCheckFactory( - "llvm-header-guard", new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "llvm-include-order", new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "llvm-namespace-comment", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "llvm-twine-local", - new ClangTidyCheckFactory()); + CheckFactories.registerCheck("llvm-header-guard"); + CheckFactories.registerCheck("llvm-include-order"); + CheckFactories.registerCheck( + "llvm-namespace-comment"); + CheckFactories.registerCheck("llvm-twine-local"); } }; Index: clang-tidy/misc/MiscTidyModule.cpp =================================================================== --- clang-tidy/misc/MiscTidyModule.cpp +++ clang-tidy/misc/MiscTidyModule.cpp @@ -24,27 +24,17 @@ class MiscModule : public ClangTidyModule { public: void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { - CheckFactories.addCheckFactory( - "misc-argument-comment", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "misc-bool-pointer-implicit-conversion", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "misc-redundant-smartptr-get", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "misc-swapped-arguments", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "misc-undelegated-constructor", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "misc-unused-raii", - new ClangTidyCheckFactory()); - CheckFactories.addCheckFactory( - "misc-use-override", - new ClangTidyCheckFactory()); + CheckFactories.registerCheck("misc-argument-comment"); + CheckFactories.registerCheck( + "misc-bool-pointer-implicit-conversion"); + CheckFactories.registerCheck( + "misc-redundant-smartptr-get"); + CheckFactories.registerCheck( + "misc-swapped-arguments"); + CheckFactories.registerCheck( + "misc-undelegated-constructor"); + CheckFactories.registerCheck("misc-unused-raii"); + CheckFactories.registerCheck("misc-use-override"); } };