From d3f17d496096984e30398ae3aa5d23ce9c3a28b8 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Wed, 1 Apr 2026 14:13:17 -0500 Subject: [PATCH] COMP: Move inline = default destructors to .cxx for 30 exported classes Non-template exported classes with `~ClassName() override = default;` inline in the header have hidden D1Ev/D0Ev destructor thunks under -fvisibility-inlines-hidden, even when the class vtable and typeinfo remain exported. This breaks dynamic_cast across DSO boundaries in shared library builds. Moving the destructor definition out of line to the .cxx file ensures it is compiled in exactly one translation unit, giving it default (exported) visibility and correctly anchoring all destructor thunks. Affected modules: ITKCommon (3), ITKIOImageBase (3), ITKFEM (1), ITKOptimizers (11), ITKStatistics (8), ITKWatersheds (2), ITKVideoCore (1). See: https://github.com/InsightSoftwareConsortium/ITK/issues/6000 --- Modules/Core/Common/include/itkEquivalencyTable.h | 2 +- Modules/Core/Common/include/itkLoggerManager.h | 2 +- Modules/Core/Common/include/itkLoggerOutput.h | 2 +- Modules/Core/Common/src/itkEquivalencyTable.cxx | 2 ++ Modules/Core/Common/src/itkLoggerManager.cxx | 2 ++ Modules/Core/Common/src/itkLoggerOutput.cxx | 2 ++ Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h | 2 +- Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h | 2 +- .../IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h | 2 +- Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx | 2 ++ Modules/IO/ImageBase/src/itkNumericSeriesFileNames.cxx | 2 ++ .../IO/ImageBase/src/itkRegularExpressionSeriesFileNames.cxx | 2 ++ Modules/Numerics/FEM/include/itkFEMLightObject.h | 2 +- Modules/Numerics/FEM/src/itkFEMLightObject.cxx | 2 ++ Modules/Numerics/Optimizers/include/itkExhaustiveOptimizer.h | 2 +- .../Numerics/Optimizers/include/itkGradientDescentOptimizer.h | 2 +- .../include/itkInitializationBiasedParticleSwarmOptimizer.h | 2 +- .../Optimizers/include/itkMultipleValuedNonLinearOptimizer.h | 2 +- .../Optimizers/include/itkOnePlusOneEvolutionaryOptimizer.h | 2 +- Modules/Numerics/Optimizers/include/itkOptimizer.h | 2 +- .../itkQuaternionRigidTransformGradientDescentOptimizer.h | 2 +- .../include/itkRegularStepGradientDescentBaseOptimizer.h | 2 +- .../Optimizers/include/itkRegularStepGradientDescentOptimizer.h | 2 +- Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h | 2 +- .../Optimizers/include/itkSingleValuedNonLinearOptimizer.h | 2 +- .../Numerics/Optimizers/include/itkVersorTransformOptimizer.h | 2 +- Modules/Numerics/Optimizers/src/itkExhaustiveOptimizer.cxx | 1 + Modules/Numerics/Optimizers/src/itkGradientDescentOptimizer.cxx | 2 ++ .../src/itkInitializationBiasedParticleSwarmOptimizer.cxx | 1 + .../Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx | 2 ++ .../Optimizers/src/itkOnePlusOneEvolutionaryOptimizer.cxx | 2 ++ Modules/Numerics/Optimizers/src/itkOptimizer.cxx | 2 ++ .../src/itkQuaternionRigidTransformGradientDescentOptimizer.cxx | 2 ++ .../src/itkRegularStepGradientDescentBaseOptimizer.cxx | 2 ++ .../Optimizers/src/itkRegularStepGradientDescentOptimizer.cxx | 2 ++ Modules/Numerics/Optimizers/src/itkSPSAOptimizer.cxx | 1 + .../Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx | 2 ++ Modules/Numerics/Optimizers/src/itkVersorTransformOptimizer.cxx | 2 ++ Modules/Numerics/Statistics/include/itkChiSquareDistribution.h | 2 +- .../Numerics/Statistics/include/itkDenseFrequencyContainer2.h | 2 +- Modules/Numerics/Statistics/include/itkGaussianDistribution.h | 2 +- Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h | 2 +- .../Numerics/Statistics/include/itkMaximumRatioDecisionRule.h | 2 +- Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h | 2 +- .../Numerics/Statistics/include/itkSparseFrequencyContainer2.h | 2 +- Modules/Numerics/Statistics/include/itkTDistribution.h | 2 +- Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx | 2 ++ Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx | 2 ++ Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx | 2 ++ Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx | 2 ++ Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx | 2 ++ Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx | 2 ++ .../Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx | 2 ++ Modules/Numerics/Statistics/src/itkTDistribution.cxx | 2 ++ .../Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h | 2 +- .../include/itkWatershedMiniPipelineProgressCommand.h | 2 +- .../Segmentation/Watersheds/src/itkOneWayEquivalencyTable.cxx | 2 ++ .../Watersheds/src/itkWatershedMiniPipelineProgressCommand.cxx | 2 ++ Modules/Video/Core/include/itkTemporalProcessObject.h | 2 +- Modules/Video/Core/src/itkTemporalProcessObject.cxx | 2 ++ 60 files changed, 87 insertions(+), 30 deletions(-) diff --git a/Modules/Core/Common/include/itkEquivalencyTable.h b/Modules/Core/Common/include/itkEquivalencyTable.h index 118e8edbd23..96cf8dac6ee 100644 --- a/Modules/Core/Common/include/itkEquivalencyTable.h +++ b/Modules/Core/Common/include/itkEquivalencyTable.h @@ -172,7 +172,7 @@ class ITKCommon_EXPORT EquivalencyTable : public DataObject protected: EquivalencyTable() = default; - ~EquivalencyTable() override = default; + ~EquivalencyTable() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Core/Common/include/itkLoggerManager.h b/Modules/Core/Common/include/itkLoggerManager.h index 2fe1a3bc09b..836f84c891c 100644 --- a/Modules/Core/Common/include/itkLoggerManager.h +++ b/Modules/Core/Common/include/itkLoggerManager.h @@ -101,7 +101,7 @@ class ITKCommon_EXPORT LoggerManager : public Object LoggerManager() = default; /** Destructor */ - ~LoggerManager() override = default; + ~LoggerManager() override; /** Print contents of a LoggerManager */ void diff --git a/Modules/Core/Common/include/itkLoggerOutput.h b/Modules/Core/Common/include/itkLoggerOutput.h index ccde5a78db6..9659015c942 100644 --- a/Modules/Core/Common/include/itkLoggerOutput.h +++ b/Modules/Core/Common/include/itkLoggerOutput.h @@ -109,7 +109,7 @@ class ITKCommon_EXPORT LoggerOutput : public OutputWindow protected: LoggerOutput() = default; - ~LoggerOutput() override = default; + ~LoggerOutput() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Core/Common/src/itkEquivalencyTable.cxx b/Modules/Core/Common/src/itkEquivalencyTable.cxx index bb686c54801..b617b7485fe 100644 --- a/Modules/Core/Common/src/itkEquivalencyTable.cxx +++ b/Modules/Core/Common/src/itkEquivalencyTable.cxx @@ -19,6 +19,8 @@ namespace itk { +EquivalencyTable::~EquivalencyTable() = default; + bool EquivalencyTable::Add(unsigned long a, unsigned long b) { diff --git a/Modules/Core/Common/src/itkLoggerManager.cxx b/Modules/Core/Common/src/itkLoggerManager.cxx index abc221a7150..d4646e1c931 100644 --- a/Modules/Core/Common/src/itkLoggerManager.cxx +++ b/Modules/Core/Common/src/itkLoggerManager.cxx @@ -19,6 +19,8 @@ namespace itk { +LoggerManager::~LoggerManager() = default; + /** create a logger and add it into LoggerManager */ LoggerManager::LoggerPointer LoggerManager::CreateLogger(const NameType & name, PriorityLevelEnum level, PriorityLevelEnum levelForFlushing) diff --git a/Modules/Core/Common/src/itkLoggerOutput.cxx b/Modules/Core/Common/src/itkLoggerOutput.cxx index 20f40566044..0736c3a6a8e 100644 --- a/Modules/Core/Common/src/itkLoggerOutput.cxx +++ b/Modules/Core/Common/src/itkLoggerOutput.cxx @@ -29,6 +29,8 @@ namespace itk { +LoggerOutput::~LoggerOutput() = default; + /** Send a string to display. */ void LoggerOutput::DisplayText(const char * t) diff --git a/Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h b/Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h index 44468f3cd1b..2f4609ad04f 100644 --- a/Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h +++ b/Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h @@ -108,7 +108,7 @@ class ITKIOImageBase_EXPORT ArchetypeSeriesFileNames : public Object protected: ArchetypeSeriesFileNames(); - ~ArchetypeSeriesFileNames() override = default; + ~ArchetypeSeriesFileNames() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h b/Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h index 38688b38e43..332cd099dbd 100644 --- a/Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h +++ b/Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h @@ -102,7 +102,7 @@ class ITKIOImageBase_EXPORT NumericSeriesFileNames : public Object protected: NumericSeriesFileNames(); - ~NumericSeriesFileNames() override = default; + ~NumericSeriesFileNames() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h b/Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h index cbe819e0238..b551c88a944 100644 --- a/Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h +++ b/Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h @@ -119,7 +119,7 @@ class ITKIOImageBase_EXPORT RegularExpressionSeriesFileNames : public Object : m_Directory(".") , m_RegularExpression(".*\\.([0-9]+)") {} - ~RegularExpressionSeriesFileNames() override = default; + ~RegularExpressionSeriesFileNames() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx b/Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx index 5e4af8e9b13..262af1ceb12 100644 --- a/Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx +++ b/Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx @@ -23,6 +23,8 @@ namespace itk { +ArchetypeSeriesFileNames::~ArchetypeSeriesFileNames() = default; + ArchetypeSeriesFileNames::ArchetypeSeriesFileNames() : m_Archetype("") {} diff --git a/Modules/IO/ImageBase/src/itkNumericSeriesFileNames.cxx b/Modules/IO/ImageBase/src/itkNumericSeriesFileNames.cxx index f216b9e7400..cb977f25372 100644 --- a/Modules/IO/ImageBase/src/itkNumericSeriesFileNames.cxx +++ b/Modules/IO/ImageBase/src/itkNumericSeriesFileNames.cxx @@ -22,6 +22,8 @@ namespace itk { +NumericSeriesFileNames::~NumericSeriesFileNames() = default; + NumericSeriesFileNames::NumericSeriesFileNames() : m_SeriesFormat("%d") {} diff --git a/Modules/IO/ImageBase/src/itkRegularExpressionSeriesFileNames.cxx b/Modules/IO/ImageBase/src/itkRegularExpressionSeriesFileNames.cxx index c0fc4be740f..b02ed69fd8f 100644 --- a/Modules/IO/ImageBase/src/itkRegularExpressionSeriesFileNames.cxx +++ b/Modules/IO/ImageBase/src/itkRegularExpressionSeriesFileNames.cxx @@ -43,6 +43,8 @@ struct lt_pair_alphabetic_string_string namespace itk { +RegularExpressionSeriesFileNames::~RegularExpressionSeriesFileNames() = default; + const std::vector & RegularExpressionSeriesFileNames::GetFileNames() { diff --git a/Modules/Numerics/FEM/include/itkFEMLightObject.h b/Modules/Numerics/FEM/include/itkFEMLightObject.h index 4579f2055ad..881d96f3a9a 100644 --- a/Modules/Numerics/FEM/include/itkFEMLightObject.h +++ b/Modules/Numerics/FEM/include/itkFEMLightObject.h @@ -75,7 +75,7 @@ class ITKFEM_EXPORT FEMLightObject : public itk::LightObject /** * Virtual destructor */ - ~FEMLightObject() override = default; + ~FEMLightObject() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/FEM/src/itkFEMLightObject.cxx b/Modules/Numerics/FEM/src/itkFEMLightObject.cxx index 6f3ff517c95..65f5ff35b40 100644 --- a/Modules/Numerics/FEM/src/itkFEMLightObject.cxx +++ b/Modules/Numerics/FEM/src/itkFEMLightObject.cxx @@ -20,6 +20,8 @@ namespace itk::fem { +FEMLightObject::~FEMLightObject() = default; + /** * Here we just read the global number from the stream. * This should be the first function called when reading object data. diff --git a/Modules/Numerics/Optimizers/include/itkExhaustiveOptimizer.h b/Modules/Numerics/Optimizers/include/itkExhaustiveOptimizer.h index f65d873c116..46a6bbcf838 100644 --- a/Modules/Numerics/Optimizers/include/itkExhaustiveOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkExhaustiveOptimizer.h @@ -136,7 +136,7 @@ class ITKOptimizers_EXPORT ExhaustiveOptimizer : public SingleValuedNonLinearOpt protected: ExhaustiveOptimizer(); - ~ExhaustiveOptimizer() override = default; + ~ExhaustiveOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkGradientDescentOptimizer.h b/Modules/Numerics/Optimizers/include/itkGradientDescentOptimizer.h index c8c429185a4..959360cc83c 100644 --- a/Modules/Numerics/Optimizers/include/itkGradientDescentOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkGradientDescentOptimizer.h @@ -170,7 +170,7 @@ class ITKOptimizers_EXPORT GradientDescentOptimizer : public SingleValuedNonLine protected: GradientDescentOptimizer(); - ~GradientDescentOptimizer() override = default; + ~GradientDescentOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkInitializationBiasedParticleSwarmOptimizer.h b/Modules/Numerics/Optimizers/include/itkInitializationBiasedParticleSwarmOptimizer.h index 78b01be92e3..8f71ab18d9e 100644 --- a/Modules/Numerics/Optimizers/include/itkInitializationBiasedParticleSwarmOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkInitializationBiasedParticleSwarmOptimizer.h @@ -113,7 +113,7 @@ class ITKOptimizers_EXPORT InitializationBiasedParticleSwarmOptimizer : public P /** @ITKEndGrouping */ protected: InitializationBiasedParticleSwarmOptimizer(); - ~InitializationBiasedParticleSwarmOptimizer() override = default; + ~InitializationBiasedParticleSwarmOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; void diff --git a/Modules/Numerics/Optimizers/include/itkMultipleValuedNonLinearOptimizer.h b/Modules/Numerics/Optimizers/include/itkMultipleValuedNonLinearOptimizer.h index f13bf07fafd..6c908c9625b 100644 --- a/Modules/Numerics/Optimizers/include/itkMultipleValuedNonLinearOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkMultipleValuedNonLinearOptimizer.h @@ -72,7 +72,7 @@ class ITKOptimizers_EXPORT MultipleValuedNonLinearOptimizer : public NonLinearOp protected: MultipleValuedNonLinearOptimizer(); - ~MultipleValuedNonLinearOptimizer() override = default; + ~MultipleValuedNonLinearOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkOnePlusOneEvolutionaryOptimizer.h b/Modules/Numerics/Optimizers/include/itkOnePlusOneEvolutionaryOptimizer.h index ecd51d5d479..6297acc3f5f 100644 --- a/Modules/Numerics/Optimizers/include/itkOnePlusOneEvolutionaryOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkOnePlusOneEvolutionaryOptimizer.h @@ -193,7 +193,7 @@ class ITKOptimizers_EXPORT OnePlusOneEvolutionaryOptimizer : public SingleValued protected: OnePlusOneEvolutionaryOptimizer(); OnePlusOneEvolutionaryOptimizer(const OnePlusOneEvolutionaryOptimizer &); - ~OnePlusOneEvolutionaryOptimizer() override = default; + ~OnePlusOneEvolutionaryOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkOptimizer.h b/Modules/Numerics/Optimizers/include/itkOptimizer.h index 264b1b7d28b..95b455b1e2c 100644 --- a/Modules/Numerics/Optimizers/include/itkOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkOptimizer.h @@ -94,7 +94,7 @@ class ITKOptimizers_EXPORT Optimizer : public Object protected: Optimizer(); - ~Optimizer() override = default; + ~Optimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkQuaternionRigidTransformGradientDescentOptimizer.h b/Modules/Numerics/Optimizers/include/itkQuaternionRigidTransformGradientDescentOptimizer.h index a16825beb6b..3b17e37a613 100644 --- a/Modules/Numerics/Optimizers/include/itkQuaternionRigidTransformGradientDescentOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkQuaternionRigidTransformGradientDescentOptimizer.h @@ -76,7 +76,7 @@ class ITKOptimizers_EXPORT QuaternionRigidTransformGradientDescentOptimizer : pu protected: QuaternionRigidTransformGradientDescentOptimizer() = default; - ~QuaternionRigidTransformGradientDescentOptimizer() override = default; + ~QuaternionRigidTransformGradientDescentOptimizer() override; }; } // end namespace itk diff --git a/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentBaseOptimizer.h b/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentBaseOptimizer.h index 7d026c957f1..4884b244443 100644 --- a/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentBaseOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentBaseOptimizer.h @@ -147,7 +147,7 @@ class ITKOptimizers_EXPORT RegularStepGradientDescentBaseOptimizer : public Sing protected: RegularStepGradientDescentBaseOptimizer(); - ~RegularStepGradientDescentBaseOptimizer() override = default; + ~RegularStepGradientDescentBaseOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentOptimizer.h b/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentOptimizer.h index c1556057cd0..5401b775a10 100644 --- a/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentOptimizer.h @@ -53,7 +53,7 @@ class ITKOptimizers_EXPORT RegularStepGradientDescentOptimizer : public RegularS protected: RegularStepGradientDescentOptimizer() = default; - ~RegularStepGradientDescentOptimizer() override = default; + ~RegularStepGradientDescentOptimizer() override; /** Advance one step along the corrected gradient taking into * account the steplength represented by factor. diff --git a/Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h b/Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h index a7e9bd18bb1..a730fde4a1f 100644 --- a/Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h @@ -259,7 +259,7 @@ class ITKOptimizers_EXPORT SPSAOptimizer : public SingleValuedNonLinearOptimizer protected: SPSAOptimizer(); - ~SPSAOptimizer() override = default; + ~SPSAOptimizer() override; /** PrintSelf method. */ void diff --git a/Modules/Numerics/Optimizers/include/itkSingleValuedNonLinearOptimizer.h b/Modules/Numerics/Optimizers/include/itkSingleValuedNonLinearOptimizer.h index 5f0a8ce17bb..c2acc25145b 100644 --- a/Modules/Numerics/Optimizers/include/itkSingleValuedNonLinearOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkSingleValuedNonLinearOptimizer.h @@ -78,7 +78,7 @@ class ITKOptimizers_EXPORT SingleValuedNonLinearOptimizer : public NonLinearOpti protected: SingleValuedNonLinearOptimizer(); - ~SingleValuedNonLinearOptimizer() override = default; + ~SingleValuedNonLinearOptimizer() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Optimizers/include/itkVersorTransformOptimizer.h b/Modules/Numerics/Optimizers/include/itkVersorTransformOptimizer.h index 109f4a18607..058d9305ef0 100644 --- a/Modules/Numerics/Optimizers/include/itkVersorTransformOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkVersorTransformOptimizer.h @@ -76,7 +76,7 @@ class ITKOptimizers_EXPORT VersorTransformOptimizer : public RegularStepGradient protected: VersorTransformOptimizer() = default; - ~VersorTransformOptimizer() override = default; + ~VersorTransformOptimizer() override; }; } // end namespace itk diff --git a/Modules/Numerics/Optimizers/src/itkExhaustiveOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkExhaustiveOptimizer.cxx index 92179a77cbe..95d59d36e25 100644 --- a/Modules/Numerics/Optimizers/src/itkExhaustiveOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkExhaustiveOptimizer.cxx @@ -19,6 +19,7 @@ namespace itk { +ExhaustiveOptimizer::~ExhaustiveOptimizer() = default; ExhaustiveOptimizer::ExhaustiveOptimizer() = default; diff --git a/Modules/Numerics/Optimizers/src/itkGradientDescentOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkGradientDescentOptimizer.cxx index 5535e10d79c..f12aeda7e83 100644 --- a/Modules/Numerics/Optimizers/src/itkGradientDescentOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkGradientDescentOptimizer.cxx @@ -20,6 +20,8 @@ namespace itk { +GradientDescentOptimizer::~GradientDescentOptimizer() = default; + /** * Constructor */ diff --git a/Modules/Numerics/Optimizers/src/itkInitializationBiasedParticleSwarmOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkInitializationBiasedParticleSwarmOptimizer.cxx index 698290d96b5..252af6c5ae6 100644 --- a/Modules/Numerics/Optimizers/src/itkInitializationBiasedParticleSwarmOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkInitializationBiasedParticleSwarmOptimizer.cxx @@ -19,6 +19,7 @@ namespace itk { +InitializationBiasedParticleSwarmOptimizer::~InitializationBiasedParticleSwarmOptimizer() = default; InitializationBiasedParticleSwarmOptimizer::InitializationBiasedParticleSwarmOptimizer() : m_InertiaCoefficient(0.7298) diff --git a/Modules/Numerics/Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx index 7fbd9f94041..e0ea64bb40d 100644 --- a/Modules/Numerics/Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx @@ -20,6 +20,8 @@ namespace itk { +MultipleValuedNonLinearOptimizer::~MultipleValuedNonLinearOptimizer() = default; + MultipleValuedNonLinearOptimizer::MultipleValuedNonLinearOptimizer() : m_CostFunction(nullptr) {} diff --git a/Modules/Numerics/Optimizers/src/itkOnePlusOneEvolutionaryOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkOnePlusOneEvolutionaryOptimizer.cxx index e973dd2bdb5..b34a843d594 100644 --- a/Modules/Numerics/Optimizers/src/itkOnePlusOneEvolutionaryOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkOnePlusOneEvolutionaryOptimizer.cxx @@ -21,6 +21,8 @@ #include "itkMath.h" namespace itk { +OnePlusOneEvolutionaryOptimizer::~OnePlusOneEvolutionaryOptimizer() = default; + OnePlusOneEvolutionaryOptimizer::OnePlusOneEvolutionaryOptimizer() : m_RandomGenerator(nullptr) , m_MaximumIteration(100) diff --git a/Modules/Numerics/Optimizers/src/itkOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkOptimizer.cxx index dc28ae6c1c8..e65bd7293cb 100644 --- a/Modules/Numerics/Optimizers/src/itkOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkOptimizer.cxx @@ -21,6 +21,8 @@ namespace itk { +Optimizer::~Optimizer() = default; + /** * Constructor */ diff --git a/Modules/Numerics/Optimizers/src/itkQuaternionRigidTransformGradientDescentOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkQuaternionRigidTransformGradientDescentOptimizer.cxx index ee341022f63..df469525bfd 100644 --- a/Modules/Numerics/Optimizers/src/itkQuaternionRigidTransformGradientDescentOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkQuaternionRigidTransformGradientDescentOptimizer.cxx @@ -21,6 +21,8 @@ namespace itk { +QuaternionRigidTransformGradientDescentOptimizer::~QuaternionRigidTransformGradientDescentOptimizer() = default; + /** * Advance one Step following the gradient direction */ diff --git a/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentBaseOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentBaseOptimizer.cxx index 8c2d3d58a77..086cb24f21f 100644 --- a/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentBaseOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentBaseOptimizer.cxx @@ -20,6 +20,8 @@ namespace itk { +RegularStepGradientDescentBaseOptimizer::~RegularStepGradientDescentBaseOptimizer() = default; + /** * Constructor */ diff --git a/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentOptimizer.cxx index 9ed1b8aff24..820921ac813 100644 --- a/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkRegularStepGradientDescentOptimizer.cxx @@ -20,6 +20,8 @@ namespace itk { +RegularStepGradientDescentOptimizer::~RegularStepGradientDescentOptimizer() = default; + /** * Advance one Step following the gradient direction * This method will be overridden in non-vector spaces diff --git a/Modules/Numerics/Optimizers/src/itkSPSAOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkSPSAOptimizer.cxx index 5944364ee97..3d677238cfc 100644 --- a/Modules/Numerics/Optimizers/src/itkSPSAOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkSPSAOptimizer.cxx @@ -21,6 +21,7 @@ namespace itk { +SPSAOptimizer::~SPSAOptimizer() = default; SPSAOptimizer::SPSAOptimizer() : m_StopCondition(StopConditionSPSAOptimizerEnum::Unknown) diff --git a/Modules/Numerics/Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx index 2f511d13bd8..ef8613d3cc7 100644 --- a/Modules/Numerics/Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx @@ -20,6 +20,8 @@ namespace itk { +SingleValuedNonLinearOptimizer::~SingleValuedNonLinearOptimizer() = default; + SingleValuedNonLinearOptimizer::SingleValuedNonLinearOptimizer() : m_CostFunction(nullptr) {} diff --git a/Modules/Numerics/Optimizers/src/itkVersorTransformOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkVersorTransformOptimizer.cxx index d3933724bb5..9c5941e4a55 100644 --- a/Modules/Numerics/Optimizers/src/itkVersorTransformOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkVersorTransformOptimizer.cxx @@ -20,6 +20,8 @@ namespace itk { +VersorTransformOptimizer::~VersorTransformOptimizer() = default; + /** * Advance one Step following the gradient direction * This method will be overridden in non-vector spaces diff --git a/Modules/Numerics/Statistics/include/itkChiSquareDistribution.h b/Modules/Numerics/Statistics/include/itkChiSquareDistribution.h index 9436a3492aa..ded72abbed5 100644 --- a/Modules/Numerics/Statistics/include/itkChiSquareDistribution.h +++ b/Modules/Numerics/Statistics/include/itkChiSquareDistribution.h @@ -226,7 +226,7 @@ class ITKStatistics_EXPORT ChiSquareDistribution : public ProbabilityDistributio protected: ChiSquareDistribution(); - ~ChiSquareDistribution() override = default; + ~ChiSquareDistribution() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Statistics/include/itkDenseFrequencyContainer2.h b/Modules/Numerics/Statistics/include/itkDenseFrequencyContainer2.h index 925d85658ab..59f386b79bd 100644 --- a/Modules/Numerics/Statistics/include/itkDenseFrequencyContainer2.h +++ b/Modules/Numerics/Statistics/include/itkDenseFrequencyContainer2.h @@ -110,7 +110,7 @@ class ITKStatistics_EXPORT DenseFrequencyContainer2 : public Object protected: DenseFrequencyContainer2(); - ~DenseFrequencyContainer2() override = default; + ~DenseFrequencyContainer2() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Statistics/include/itkGaussianDistribution.h b/Modules/Numerics/Statistics/include/itkGaussianDistribution.h index d27d859950d..3e74310982e 100644 --- a/Modules/Numerics/Statistics/include/itkGaussianDistribution.h +++ b/Modules/Numerics/Statistics/include/itkGaussianDistribution.h @@ -261,7 +261,7 @@ class ITKStatistics_EXPORT GaussianDistribution : public ProbabilityDistribution protected: GaussianDistribution(); - ~GaussianDistribution() override = default; + ~GaussianDistribution() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h b/Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h index 4e0ab11b9cc..96518327eca 100644 --- a/Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h +++ b/Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h @@ -67,7 +67,7 @@ class ITKStatistics_EXPORT MaximumDecisionRule : public DecisionRule protected: MaximumDecisionRule() = default; - ~MaximumDecisionRule() override = default; + ~MaximumDecisionRule() override; }; // end of class } // namespace itk::Statistics diff --git a/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h b/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h index efc7ba1e63f..82f13575dd5 100644 --- a/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h +++ b/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h @@ -104,7 +104,7 @@ class ITKStatistics_EXPORT MaximumRatioDecisionRule : public DecisionRule protected: MaximumRatioDecisionRule(); - ~MaximumRatioDecisionRule() override = default; + ~MaximumRatioDecisionRule() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h b/Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h index ca875fa56c8..3b09ea5a6e5 100644 --- a/Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h +++ b/Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h @@ -64,7 +64,7 @@ class ITKStatistics_EXPORT MinimumDecisionRule : public DecisionRule protected: MinimumDecisionRule() = default; - ~MinimumDecisionRule() override = default; + ~MinimumDecisionRule() override; }; // end of class } // namespace itk::Statistics diff --git a/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h b/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h index 11b481173ee..473a22f7984 100644 --- a/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h +++ b/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h @@ -104,7 +104,7 @@ class ITKStatistics_EXPORT SparseFrequencyContainer2 : public Object protected: SparseFrequencyContainer2(); - ~SparseFrequencyContainer2() override = default; + ~SparseFrequencyContainer2() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Statistics/include/itkTDistribution.h b/Modules/Numerics/Statistics/include/itkTDistribution.h index cebec4a10c5..cbc521bf554 100644 --- a/Modules/Numerics/Statistics/include/itkTDistribution.h +++ b/Modules/Numerics/Statistics/include/itkTDistribution.h @@ -226,7 +226,7 @@ class ITKStatistics_EXPORT TDistribution : public ProbabilityDistribution protected: TDistribution(); - ~TDistribution() override = default; + ~TDistribution() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx b/Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx index ba5c3079f22..51cae2a4e3c 100644 --- a/Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx +++ b/Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx @@ -27,6 +27,8 @@ dgamma_(double * x); namespace itk::Statistics { +ChiSquareDistribution::~ChiSquareDistribution() = default; + ChiSquareDistribution::ChiSquareDistribution() { m_Parameters = ParametersType(1); diff --git a/Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx b/Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx index 9bc74c00734..72f33c2a6fc 100644 --- a/Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx +++ b/Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx @@ -19,6 +19,8 @@ namespace itk::Statistics { +DenseFrequencyContainer2::~DenseFrequencyContainer2() = default; + DenseFrequencyContainer2::DenseFrequencyContainer2() : m_TotalFrequency(TotalAbsoluteFrequencyType{}) { diff --git a/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx b/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx index 31d45873fc2..1c02025bc8f 100644 --- a/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx +++ b/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx @@ -21,6 +21,8 @@ namespace itk::Statistics { +GaussianDistribution::~GaussianDistribution() = default; + GaussianDistribution::GaussianDistribution() { m_Parameters = ParametersType(2); diff --git a/Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx b/Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx index 6db42934fba..3839b221036 100644 --- a/Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx +++ b/Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx @@ -19,6 +19,8 @@ namespace itk::Statistics { +MaximumDecisionRule::~MaximumDecisionRule() = default; + MaximumDecisionRule::ClassIdentifierType MaximumDecisionRule::Evaluate(const MembershipVectorType & discriminantScores) const { diff --git a/Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx b/Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx index ba0ed824489..1a9d9d5d47d 100644 --- a/Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx +++ b/Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx @@ -20,6 +20,8 @@ namespace itk::Statistics { +MaximumRatioDecisionRule::~MaximumRatioDecisionRule() = default; + MaximumRatioDecisionRule::MaximumRatioDecisionRule() = default; void diff --git a/Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx b/Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx index b1b63c85d77..f5050ff34ae 100644 --- a/Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx +++ b/Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx @@ -19,6 +19,8 @@ namespace itk::Statistics { +MinimumDecisionRule::~MinimumDecisionRule() = default; + MinimumDecisionRule::ClassIdentifierType MinimumDecisionRule::Evaluate(const MembershipVectorType & discriminantScores) const { diff --git a/Modules/Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx b/Modules/Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx index aafca854e20..cf258d556e4 100644 --- a/Modules/Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx +++ b/Modules/Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx @@ -19,6 +19,8 @@ namespace itk::Statistics { +SparseFrequencyContainer2::~SparseFrequencyContainer2() = default; + SparseFrequencyContainer2::SparseFrequencyContainer2() : m_TotalFrequency(TotalAbsoluteFrequencyType{}) {} diff --git a/Modules/Numerics/Statistics/src/itkTDistribution.cxx b/Modules/Numerics/Statistics/src/itkTDistribution.cxx index 8e86967b943..e0663a4b687 100644 --- a/Modules/Numerics/Statistics/src/itkTDistribution.cxx +++ b/Modules/Numerics/Statistics/src/itkTDistribution.cxx @@ -28,6 +28,8 @@ dgamma_(double * x); namespace itk::Statistics { +TDistribution::~TDistribution() = default; + TDistribution::TDistribution() { m_Parameters = ParametersType(1); diff --git a/Modules/Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h b/Modules/Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h index 8b61ef92955..016cea83523 100644 --- a/Modules/Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h +++ b/Modules/Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h @@ -159,7 +159,7 @@ class ITKWatersheds_EXPORT OneWayEquivalencyTable : public DataObject protected: OneWayEquivalencyTable() = default; - ~OneWayEquivalencyTable() override = default; + ~OneWayEquivalencyTable() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Segmentation/Watersheds/include/itkWatershedMiniPipelineProgressCommand.h b/Modules/Segmentation/Watersheds/include/itkWatershedMiniPipelineProgressCommand.h index bb137d0d1c8..4bdf7530454 100644 --- a/Modules/Segmentation/Watersheds/include/itkWatershedMiniPipelineProgressCommand.h +++ b/Modules/Segmentation/Watersheds/include/itkWatershedMiniPipelineProgressCommand.h @@ -77,7 +77,7 @@ class ITKWatersheds_EXPORT WatershedMiniPipelineProgressCommand : public Command /** @ITKEndGrouping */ protected: WatershedMiniPipelineProgressCommand() = default; - ~WatershedMiniPipelineProgressCommand() override = default; + ~WatershedMiniPipelineProgressCommand() override; void PrintSelf(std::ostream & os, Indent indent) const override; diff --git a/Modules/Segmentation/Watersheds/src/itkOneWayEquivalencyTable.cxx b/Modules/Segmentation/Watersheds/src/itkOneWayEquivalencyTable.cxx index f5cd12fc95d..34f7529c0f1 100644 --- a/Modules/Segmentation/Watersheds/src/itkOneWayEquivalencyTable.cxx +++ b/Modules/Segmentation/Watersheds/src/itkOneWayEquivalencyTable.cxx @@ -19,6 +19,8 @@ namespace itk { +OneWayEquivalencyTable::~OneWayEquivalencyTable() = default; + bool OneWayEquivalencyTable::Add(unsigned long a, unsigned long b) { diff --git a/Modules/Segmentation/Watersheds/src/itkWatershedMiniPipelineProgressCommand.cxx b/Modules/Segmentation/Watersheds/src/itkWatershedMiniPipelineProgressCommand.cxx index 2f23c091c60..66669c34e04 100644 --- a/Modules/Segmentation/Watersheds/src/itkWatershedMiniPipelineProgressCommand.cxx +++ b/Modules/Segmentation/Watersheds/src/itkWatershedMiniPipelineProgressCommand.cxx @@ -19,6 +19,8 @@ namespace itk { +WatershedMiniPipelineProgressCommand::~WatershedMiniPipelineProgressCommand() = default; + void WatershedMiniPipelineProgressCommand::Execute(Object * caller, const EventObject & event) { diff --git a/Modules/Video/Core/include/itkTemporalProcessObject.h b/Modules/Video/Core/include/itkTemporalProcessObject.h index 2d94dc0d489..90209244987 100644 --- a/Modules/Video/Core/include/itkTemporalProcessObject.h +++ b/Modules/Video/Core/include/itkTemporalProcessObject.h @@ -153,7 +153,7 @@ class ITKVideoCore_EXPORT TemporalProcessObject : public ProcessObject TemporalProcessObject(); /** Empty Destructor */ - ~TemporalProcessObject() override = default; + ~TemporalProcessObject() override; /** ITK print mechanism */ void diff --git a/Modules/Video/Core/src/itkTemporalProcessObject.cxx b/Modules/Video/Core/src/itkTemporalProcessObject.cxx index 14a2d9642e5..a19bf1f7f4d 100644 --- a/Modules/Video/Core/src/itkTemporalProcessObject.cxx +++ b/Modules/Video/Core/src/itkTemporalProcessObject.cxx @@ -22,6 +22,8 @@ namespace itk { +TemporalProcessObject::~TemporalProcessObject() = default; + //-CONSTRUCTOR PRINT-----------------------------------------------------------