From 7755f81bb8ba1c6a47e3a528acbbc462e56adaff Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 12 May 2021 19:44:00 +0200 Subject: Codechange: make explicit that virtual functions in a con/destructor are resolved statically This as during construction the sub class has not been initialized yet, and during destruction the sub class has already been destroyed, so the overriding virtual function would be accessing uninitialized data. --- src/script/script_config.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/script/script_config.cpp') diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index 9bb953c4c..eeab51bed 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -37,6 +37,7 @@ void ScriptConfig::Change(const char *name, int version, bool force_exact_match, this->SetSetting(item.name, InteractiveRandomRange(item.max_value + 1 - item.min_value) + item.min_value); } } + this->AddRandomDeviation(); } } @@ -52,7 +53,9 @@ ScriptConfig::ScriptConfig(const ScriptConfig *config) for (const auto &item : config->settings) { this->settings[stredup(item.first)] = item.second; } - this->AddRandomDeviation(); + + /* Virtual functions get called statically in constructors, so make it explicit to remove any confusion. */ + this->ScriptConfig::AddRandomDeviation(); } ScriptConfig::~ScriptConfig() -- cgit v1.2.3-54-g00ecf