Ref T709 Prevent instantiation of CXSwiftBusSettingsQtFree, to avoid slicing.

- Constructors and destructor are protected.
- Therefore destructor doesn't need to be virtual.
- objectUpdated is pure virtual, so the class is abstract.
- Both derived classes are declared final.
This commit is contained in:
Mat Sutcliffe
2019-08-12 22:39:14 +01:00
parent 2e571b72fd
commit 349da3633b
4 changed files with 11 additions and 14 deletions

View File

@@ -27,7 +27,7 @@ namespace BlackMisc
namespace Settings
{
//! XSwiftBus settings
class BLACKMISC_EXPORT CXSwiftBusSettings :
class BLACKMISC_EXPORT CXSwiftBusSettings final :
public CValueObject<CXSwiftBusSettings>,
public CXSwiftBusSettingsQtFree,
public ITimestampBased
@@ -88,7 +88,7 @@ namespace BlackMisc
protected:
//! \copydoc CXSwiftBusSettingsQtFree::objectUpdated
virtual void objectUpdated() override;
virtual void objectUpdated() override final;
private:
BLACK_METACLASS(

View File

@@ -147,11 +147,6 @@ namespace BlackMisc
const milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
m_msSinceEpochQtFree = static_cast<int64_t>(ms.count());
}
void CXSwiftBusSettingsQtFree::objectUpdated()
{
// void
}
} // ns
} // ns
} // ns

View File

@@ -24,16 +24,17 @@ namespace BlackMisc
*/
class CXSwiftBusSettingsQtFree
{
public:
protected:
//! Constructor.
CXSwiftBusSettingsQtFree();
//! JSON Constructor.
CXSwiftBusSettingsQtFree(const std::string &json);
//! Dtor
virtual ~CXSwiftBusSettingsQtFree() {}
//! Destructor.
~CXSwiftBusSettingsQtFree() = default;
public:
//! DBus server
const std::string &getDBusServerAddress() const { return m_dBusServerAddress; }
@@ -112,7 +113,7 @@ namespace BlackMisc
//! @}
//! Object has been updated
virtual void objectUpdated();
virtual void objectUpdated() = 0;
std::string m_dBusServerAddress { "tcp:host=127.0.0.1,port=45001" }; //!< DBus server
std::string m_nightTextureMode { "auto" }; //!< night texture mode

View File

@@ -18,7 +18,7 @@ namespace XSwiftBus
/*!
* XSwiftBus/swift side settings class, JSON capable, shared among all services
*/
class CSettings : public BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree
class CSettings final : public BlackMisc::Simulation::Settings::CXSwiftBusSettingsQtFree
{
public:
//! Constructor.
@@ -27,8 +27,9 @@ namespace XSwiftBus
//! JSON constructor
CSettings(const std::string &json);
//! Destructor;
virtual ~CSettings() {}
protected:
//! \copydoc CXSwiftBusSettingsQtFree::objectUpdated
virtual void objectUpdated() override final {}
};
//! Something owning the settings