StringName: Use inline static field definitions
Before this change StringName used regular static field definitions for its mutex, _table, configured and debug_stringname fields. Since in the general case the ordering of the static variable and field initialization and destruction is undefined, it was possible that the destruction of StringName's static fields happened prior to the destruction of statically allocated StringName instances. By changing the static field definitions to inline in string_name.h, the C++17 standard guarantees the correct initialization and destruction ordering.
This commit is contained in:
parent
8e36f98ea5
commit
723878bbab
2 changed files with 4 additions and 13 deletions
|
|
@ -39,19 +39,10 @@ StaticCString StaticCString::create(const char *p_ptr) {
|
|||
return scs;
|
||||
}
|
||||
|
||||
StringName::_Data *StringName::_table[STRING_TABLE_LEN];
|
||||
|
||||
StringName _scs_create(const char *p_chr, bool p_static) {
|
||||
return (p_chr[0] ? StringName(StaticCString::create(p_chr), p_static) : StringName());
|
||||
}
|
||||
|
||||
bool StringName::configured = false;
|
||||
Mutex StringName::mutex;
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
bool StringName::debug_stringname = false;
|
||||
#endif
|
||||
|
||||
void StringName::setup() {
|
||||
ERR_FAIL_COND(configured);
|
||||
for (int i = 0; i < STRING_TABLE_LEN; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue