diff --git a/doc/contributing/source/coding-style.rst b/doc/contributing/source/coding-style.rst index ff8df647a..2053dceef 100644 --- a/doc/contributing/source/coding-style.rst +++ b/doc/contributing/source/coding-style.rst @@ -1512,6 +1512,16 @@ for more details. - Avoid declaring trivial destructors, to optimize performance. +.. _When an empty destructor is required: https://andreasfertig.com/blog/2023/12/when-an-empty-destructor-is-required/ + +- When declaring default destructors with ``~Class() = default;``, be aware + that classes derived from ``SimpleRefCount`` must have this declaration + on the source file (``.cc``). The header file (``.h``) should contain + the plain destructor declaration ``~Class();``. This is due to PIMPL's + opaque pointer, as explained in Andrea Fertig's blog post + `When an empty destructor is required`_. + See class WifiPpdu's destructor for an example. + C++ standard ============ diff --git a/src/wifi/model/wifi-ppdu.cc b/src/wifi/model/wifi-ppdu.cc index 58075241a..9b2be06bc 100644 --- a/src/wifi/model/wifi-ppdu.cc +++ b/src/wifi/model/wifi-ppdu.cc @@ -100,6 +100,8 @@ WifiPpdu::WifiPpdu(const WifiConstPsduMap& psdus, m_psdus = psdus; } +WifiPpdu::~WifiPpdu() = default; + const WifiTxVector& WifiPpdu::GetTxVector() const { diff --git a/src/wifi/model/wifi-ppdu.h b/src/wifi/model/wifi-ppdu.h index 403212f97..19079504c 100644 --- a/src/wifi/model/wifi-ppdu.h +++ b/src/wifi/model/wifi-ppdu.h @@ -73,7 +73,7 @@ class WifiPpdu : public SimpleRefCount /** * Destructor for WifiPpdu. */ - virtual ~WifiPpdu() = default; + virtual ~WifiPpdu(); /** * Get the TXVECTOR used to send the PPDU.