Common/String: Don't copy StaticStrings when not writing

This commit is contained in:
Connor McLaughlin
2020-02-28 17:00:02 +10:00
parent 4fe57e64d7
commit 86094b8080
2 changed files with 18 additions and 24 deletions

View File

@ -124,7 +124,7 @@ static String::StringData* StringDataReallocate(String::StringData* pStringData,
static bool StringDataIsSharable(const String::StringData* pStringData)
{
return pStringData->ReferenceCount != -1;
return pStringData->ReadOnly || pStringData->ReferenceCount != -1;
}
static bool StringDataIsShared(const String::StringData* pStringData)
@ -145,7 +145,8 @@ String::String(const String& copyString)
else if (StringDataIsSharable(copyString.m_pStringData))
{
m_pStringData = copyString.m_pStringData;
StringDataAddRef(m_pStringData);
if (!m_pStringData->ReadOnly)
StringDataAddRef(m_pStringData);
}
// create a clone for ourselves
else
@ -525,7 +526,8 @@ void String::Assign(const String& copyString)
else if (StringDataIsSharable(copyString.m_pStringData))
{
m_pStringData = copyString.m_pStringData;
StringDataAddRef(m_pStringData);
if (!m_pStringData->ReadOnly)
StringDataAddRef(m_pStringData);
}
// create a clone for ourselves
else