From 1969d37cb56ccc1bf9ce2eaf5e6b7810b58e9c32 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 a3337c5c11f..3dad6cd3cff 100644 --- a/Modules/Core/Common/include/itkEquivalencyTable.h +++ b/Modules/Core/Common/include/itkEquivalencyTable.h @@ -175,7 +175,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 ef4a32ee007..e36d2fc9064 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 a3486310956..cb2913e0e62 100644 --- a/Modules/Core/Common/include/itkLoggerOutput.h +++ b/Modules/Core/Common/include/itkLoggerOutput.h @@ -103,7 +103,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 0371a7312f6..de3b06cda66 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 9433fc6985b..b8ffc9c1709 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 c1da226fe8e..0b71e8703db 100644 --- a/Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h +++ b/Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h @@ -98,7 +98,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 25682b67b03..ab218b9d05d 100644 --- a/Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h +++ b/Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h @@ -115,7 +115,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 6936658d3dd..ff77b580def 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 34ee684e59e..825a4b7b130 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 8d1eaef9378..4591f066510 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 d5f0c9c8938..d2a08d1c3e3 100644 --- a/Modules/Numerics/FEM/include/itkFEMLightObject.h +++ b/Modules/Numerics/FEM/include/itkFEMLightObject.h @@ -77,7 +77,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 07d7e138424..b16159f0f7a 100644 --- a/Modules/Numerics/FEM/src/itkFEMLightObject.cxx +++ b/Modules/Numerics/FEM/src/itkFEMLightObject.cxx @@ -22,6 +22,8 @@ namespace itk { namespace 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 ad3c60a4f80..2ad7e866d24 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 e970db8f179..b1bf6959bc7 100644 --- a/Modules/Numerics/Optimizers/include/itkGradientDescentOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkGradientDescentOptimizer.h @@ -168,7 +168,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 442ce9ff4bf..4cf06abbe91 100644 --- a/Modules/Numerics/Optimizers/include/itkInitializationBiasedParticleSwarmOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkInitializationBiasedParticleSwarmOptimizer.h @@ -116,7 +116,7 @@ class ITKOptimizers_EXPORT InitializationBiasedParticleSwarmOptimizer : public P 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 d19935fdb3a..7692db6c23b 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 a2f6eab90f7..87914d39627 100644 --- a/Modules/Numerics/Optimizers/include/itkOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkOptimizer.h @@ -93,7 +93,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 c74bff690c1..1a4822c7868 100644 --- a/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentBaseOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkRegularStepGradientDescentBaseOptimizer.h @@ -145,7 +145,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 40a3782edb4..e51696285af 100644 --- a/Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h +++ b/Modules/Numerics/Optimizers/include/itkSPSAOptimizer.h @@ -256,7 +256,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 e5f26523009..db3f8c55827 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 280cafe9077..2bfff0107f3 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 4fa21db1088..590bafb858a 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() { diff --git a/Modules/Numerics/Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkMultipleValuedNonLinearOptimizer.cxx index 21291ee0fe1..257f7b75ed2 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 ad9e0acd7f7..6eae8d0b3c9 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_CatchGetValueException = false; diff --git a/Modules/Numerics/Optimizers/src/itkOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkOptimizer.cxx index 56d6afadde9..da76977ed06 100644 --- a/Modules/Numerics/Optimizers/src/itkOptimizer.cxx +++ b/Modules/Numerics/Optimizers/src/itkOptimizer.cxx @@ -20,6 +20,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 3961281cb19..109e27f0ce9 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 3cf0b8be65b..ce04aefa56a 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() diff --git a/Modules/Numerics/Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx b/Modules/Numerics/Optimizers/src/itkSingleValuedNonLinearOptimizer.cxx index 92191e0ba2b..b272ef295a4 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 ca4a5c63983..d63ea939a0f 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 ad901365061..eb5d3fdd75d 100644 --- a/Modules/Numerics/Statistics/include/itkChiSquareDistribution.h +++ b/Modules/Numerics/Statistics/include/itkChiSquareDistribution.h @@ -228,7 +228,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 9019db0f512..5f56613d164 100644 --- a/Modules/Numerics/Statistics/include/itkDenseFrequencyContainer2.h +++ b/Modules/Numerics/Statistics/include/itkDenseFrequencyContainer2.h @@ -112,7 +112,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 55d6e147b9c..2ece0a55f3d 100644 --- a/Modules/Numerics/Statistics/include/itkGaussianDistribution.h +++ b/Modules/Numerics/Statistics/include/itkGaussianDistribution.h @@ -265,7 +265,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 5c451a6419b..5964f2e0781 100644 --- a/Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h +++ b/Modules/Numerics/Statistics/include/itkMaximumDecisionRule.h @@ -69,7 +69,7 @@ class ITKStatistics_EXPORT MaximumDecisionRule : public DecisionRule protected: MaximumDecisionRule() = default; - ~MaximumDecisionRule() override = default; + ~MaximumDecisionRule() override; }; // end of class } // end of namespace Statistics diff --git a/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h b/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h index 96f50601a65..4be05617e63 100644 --- a/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h +++ b/Modules/Numerics/Statistics/include/itkMaximumRatioDecisionRule.h @@ -106,7 +106,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 86d38cba5fa..245c25e9231 100644 --- a/Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h +++ b/Modules/Numerics/Statistics/include/itkMinimumDecisionRule.h @@ -66,7 +66,7 @@ class ITKStatistics_EXPORT MinimumDecisionRule : public DecisionRule protected: MinimumDecisionRule() = default; - ~MinimumDecisionRule() override = default; + ~MinimumDecisionRule() override; }; // end of class } // end of namespace Statistics diff --git a/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h b/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h index 0eb303fc61d..f42735f12c2 100644 --- a/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h +++ b/Modules/Numerics/Statistics/include/itkSparseFrequencyContainer2.h @@ -105,7 +105,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 68d29cdd0fa..94989f5c4f4 100644 --- a/Modules/Numerics/Statistics/include/itkTDistribution.h +++ b/Modules/Numerics/Statistics/include/itkTDistribution.h @@ -228,7 +228,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 73ff795aca0..c0399b831f9 100644 --- a/Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx +++ b/Modules/Numerics/Statistics/src/itkChiSquareDistribution.cxx @@ -29,6 +29,8 @@ namespace itk { namespace 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 b7d65750f18..67c2671ec9a 100644 --- a/Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx +++ b/Modules/Numerics/Statistics/src/itkDenseFrequencyContainer2.cxx @@ -21,6 +21,8 @@ namespace itk { namespace Statistics { +DenseFrequencyContainer2::~DenseFrequencyContainer2() = default; + DenseFrequencyContainer2::DenseFrequencyContainer2() { m_FrequencyContainer = FrequencyContainerType::New(); diff --git a/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx b/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx index bc76cf9b520..ce7ce1d770f 100644 --- a/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx +++ b/Modules/Numerics/Statistics/src/itkGaussianDistribution.cxx @@ -23,6 +23,8 @@ namespace itk { namespace 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 340b60bf1ec..aa3f0ed1b11 100644 --- a/Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx +++ b/Modules/Numerics/Statistics/src/itkMaximumDecisionRule.cxx @@ -21,6 +21,8 @@ namespace itk { namespace 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 5c2f11f8eba..db3bb81098a 100644 --- a/Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx +++ b/Modules/Numerics/Statistics/src/itkMaximumRatioDecisionRule.cxx @@ -22,6 +22,8 @@ namespace itk { namespace 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 71abce0d7fd..a82f6732174 100644 --- a/Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx +++ b/Modules/Numerics/Statistics/src/itkMinimumDecisionRule.cxx @@ -21,6 +21,8 @@ namespace itk { namespace 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 30c57f1d506..cf2a338f799 100644 --- a/Modules/Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx +++ b/Modules/Numerics/Statistics/src/itkSparseFrequencyContainer2.cxx @@ -21,6 +21,8 @@ namespace itk { namespace 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 8cde6da2c6a..0ea9a921e9d 100644 --- a/Modules/Numerics/Statistics/src/itkTDistribution.cxx +++ b/Modules/Numerics/Statistics/src/itkTDistribution.cxx @@ -30,6 +30,8 @@ namespace itk { namespace 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 e64e712d8a3..cd1f64e07f9 100644 --- a/Modules/Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h +++ b/Modules/Segmentation/Watersheds/include/itkOneWayEquivalencyTable.h @@ -162,7 +162,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 edf6b6eef87..891fcac7ba2 100644 --- a/Modules/Segmentation/Watersheds/include/itkWatershedMiniPipelineProgressCommand.h +++ b/Modules/Segmentation/Watersheds/include/itkWatershedMiniPipelineProgressCommand.h @@ -73,7 +73,7 @@ class ITKWatersheds_EXPORT WatershedMiniPipelineProgressCommand : public Command 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 9df4e339629..325ee33e32a 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 122deaef00e..5be9109f8b5 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-----------------------------------------------------------