Apply Rule of Zero to empty destructors across core/ (#706)
## Summary
Remove trivially empty (`~X() {}`) or `= default;`-bodied destructors
across `core/`, **deleting the declaration outright** rather than
re-declaring it as `= default` in the header. The now-redundant
out-of-line `.cc` definitions are removed as well.
Per @roccomoretti's review, two corrections to the original approach:
1. **`~X() override = default;` is unnecessary.** For every derived
class here the base already declares a virtual destructor, so the
destructor is virtual by inheritance whether or not it is declared — the
explicit declaration bought nothing. Omitting it is the actual Rule of
Zero: it keeps the destructor virtual (inherited) and drops the
boilerplate.
2. **Defaulting the destructor does *not* restore the implicit move
members.** A `~X() = default;` destructor is still *user-declared*,
which suppresses the implicit move constructor/assignment exactly as a
user-provided one would. (An earlier version of this description wrongly
claimed defaulting "unlocks" moves.) Only omitting the destructor
entirely lets the implicit moves be generated — and then only for
classes with no other user-declared special members.
Two classes are polymorphic bases that need an explicitly-declared
virtual destructor and therefore **keep `virtual ~X() = default;`**:
`LKHBondInfo` and `HBondInfo`.
## Affected sibling groups
- `core/conformation/membrane/{AqueousPoreParameters, ImplicitLipidInfo,
MembraneGeometry, MembraneInfo}` and `membrane_geometry/{Bicelle,
DoubleVesicle, Slab, Vesicle}` — 8 classes
- `core/conformation/parametric/{Boolean, Real, RealVector, Size,
SizeVector}ValuedParameter` — 5 classes
- `core/io/silent/SilentFileData::{iterator, const_iterator}` — inline
empty dtors removed
- `core/pack/interaction_graph/RotamerDots.{hh,cc}` — `DotSphere`,
`RotamerDots`, `RotamerDotsCache`, `InvRotamerDots`
- `core/scoring/etable/EtableEnergy.{hh,cc}` — `EtableEvaluator`,
`AnalyticEtableEvaluator`, `TableLookupEvaluator`
- `core/scoring/hbonds/graph/HBondInfo.hh` — `LKHBondInfo`, `HBondInfo`
kept as `virtual ~X() = default;` (polymorphic roots); also removed an
unused user-defined empty copy ctor on `LKHBondInfo`
- `core/scoring/nmr/NMRDummySpinlabelVoxelGrid.{hh,cc}` —
`VoxelGridPoint`, `NMRDummySpinlabelAtom`, `VoxelGridPoint_AA`,
`NMRDummySpinlabelVoxelGrid`
- `core/scoring/sc/MolecularSurfaceCalculator::Atom`
- `core/energy_methods/SAXSEnergy`