diff --git a/include/core/String.hpp b/include/core/String.hpp index fa3944d7..4992adb2 100644 --- a/include/core/String.hpp +++ b/include/core/String.hpp @@ -17,6 +17,7 @@ class CharString { friend class String; godot_char_string _char_string; + bool _deleted = false; public: ~CharString(); diff --git a/src/core/String.cpp b/src/core/String.cpp index 767578fb..04b73879 100644 --- a/src/core/String.cpp +++ b/src/core/String.cpp @@ -74,12 +74,15 @@ String::String(const String &other) { } String::String(String&& other) { - godot::api->godot_string_new_copy(&_godot_string, &other._godot_string); - godot::api->godot_string_destroy(&_godot_string); + _godot_string = other._godot_string; + other._deleted = true; } String::~String() { - godot::api->godot_string_destroy(&_godot_string); + if (!_deleted) { + godot::api->godot_string_destroy(&_godot_string); + _deleted = true; + } } wchar_t &String::operator[](const int idx) { @@ -101,8 +104,8 @@ void String::operator=(const String &s) { void String::operator=(String&& s) { godot::api->godot_string_destroy(&_godot_string); - godot::api->godot_string_new_copy(&_godot_string, &s._godot_string); - godot::api->godot_string_destroy(&s._godot_string); + _godot_string = s._godot_string; + s._deleted = true; } bool String::operator==(const String &s) const {