Skip to content

Commit 1969d37

Browse files
hjmjohnsonthewtex
authored andcommitted
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: #6000
1 parent a43fa81 commit 1969d37

60 files changed

Lines changed: 87 additions & 30 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Modules/Core/Common/include/itkEquivalencyTable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class ITKCommon_EXPORT EquivalencyTable : public DataObject
175175

176176
protected:
177177
EquivalencyTable() = default;
178-
~EquivalencyTable() override = default;
178+
~EquivalencyTable() override;
179179
void
180180
PrintSelf(std::ostream & os, Indent indent) const override;
181181

Modules/Core/Common/include/itkLoggerManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class ITKCommon_EXPORT LoggerManager : public Object
101101
LoggerManager() = default;
102102

103103
/** Destructor */
104-
~LoggerManager() override = default;
104+
~LoggerManager() override;
105105

106106
/** Print contents of a LoggerManager */
107107
void

Modules/Core/Common/include/itkLoggerOutput.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class ITKCommon_EXPORT LoggerOutput : public OutputWindow
103103

104104
protected:
105105
LoggerOutput() = default;
106-
~LoggerOutput() override = default;
106+
~LoggerOutput() override;
107107
void
108108
PrintSelf(std::ostream & os, Indent indent) const override;
109109

Modules/Core/Common/src/itkEquivalencyTable.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
namespace itk
2121
{
22+
EquivalencyTable::~EquivalencyTable() = default;
23+
2224
bool
2325
EquivalencyTable::Add(unsigned long a, unsigned long b)
2426
{

Modules/Core/Common/src/itkLoggerManager.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
namespace itk
2121
{
22+
LoggerManager::~LoggerManager() = default;
23+
2224
/** create a logger and add it into LoggerManager */
2325
LoggerManager::LoggerPointer
2426
LoggerManager::CreateLogger(const NameType & name, PriorityLevelEnum level, PriorityLevelEnum levelForFlushing)

Modules/Core/Common/src/itkLoggerOutput.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
namespace itk
3131
{
32+
LoggerOutput::~LoggerOutput() = default;
33+
3234
/** Send a string to display. */
3335
void
3436
LoggerOutput::DisplayText(const char * t)

Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class ITKIOImageBase_EXPORT ArchetypeSeriesFileNames : public Object
108108

109109
protected:
110110
ArchetypeSeriesFileNames();
111-
~ArchetypeSeriesFileNames() override = default;
111+
~ArchetypeSeriesFileNames() override;
112112
void
113113
PrintSelf(std::ostream & os, Indent indent) const override;
114114

Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class ITKIOImageBase_EXPORT NumericSeriesFileNames : public Object
9898

9999
protected:
100100
NumericSeriesFileNames();
101-
~NumericSeriesFileNames() override = default;
101+
~NumericSeriesFileNames() override;
102102
void
103103
PrintSelf(std::ostream & os, Indent indent) const override;
104104

Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class ITKIOImageBase_EXPORT RegularExpressionSeriesFileNames : public Object
115115
: m_Directory(".")
116116
, m_RegularExpression(".*\\.([0-9]+)")
117117
{}
118-
~RegularExpressionSeriesFileNames() override = default;
118+
~RegularExpressionSeriesFileNames() override;
119119
void
120120
PrintSelf(std::ostream & os, Indent indent) const override;
121121

Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
namespace itk
2525
{
26+
ArchetypeSeriesFileNames::~ArchetypeSeriesFileNames() = default;
27+
2628
ArchetypeSeriesFileNames::ArchetypeSeriesFileNames()
2729
: m_Archetype("")
2830
{}

0 commit comments

Comments
 (0)