diff options
author | sheepandshepherd <sheepandshepherd@hotmail.com> | 2019-12-04 21:12:59 +0100 |
---|---|---|
committer | sheepandshepherd <sheepandshepherd@hotmail.com> | 2020-01-31 00:08:02 +0100 |
commit | 66c671b59dece97d523478cae7c602de6d423aa4 (patch) | |
tree | d2206102a8d43efeef21f3fe740ce3e36d4dbb6a | |
parent | aba8766618c6aa40c6f7b40b513e8e47cfa807f4 (diff) | |
download | redot-cpp-66c671b59dece97d523478cae7c602de6d423aa4.tar.gz |
Add C conversion constructors to fix leak of default-constructed empty arrays
-rw-r--r-- | include/core/Array.hpp | 5 | ||||
-rw-r--r-- | include/core/Dictionary.hpp | 5 | ||||
-rw-r--r-- | src/core/Variant.cpp | 6 |
3 files changed, 12 insertions, 4 deletions
diff --git a/include/core/Array.hpp b/include/core/Array.hpp index d766c54..3d13914 100644 --- a/include/core/Array.hpp +++ b/include/core/Array.hpp @@ -57,6 +57,11 @@ class Object; class Array { godot_array _godot_array; + friend class Variant; + inline explicit Array(const godot_array &other) { + _godot_array = other; + } + public: Array(); Array(const Array &other); diff --git a/include/core/Dictionary.hpp b/include/core/Dictionary.hpp index ec97602..7f40adc 100644 --- a/include/core/Dictionary.hpp +++ b/include/core/Dictionary.hpp @@ -12,6 +12,11 @@ namespace godot { class Dictionary { godot_dictionary _godot_dictionary; + friend Variant::operator Dictionary() const; + inline explicit Dictionary(const godot_dictionary &other) { + _godot_dictionary = other; + } + public: Dictionary(); Dictionary(const Dictionary &other); diff --git a/src/core/Variant.cpp b/src/core/Variant.cpp index 4c5cfe6..86d2f91 100644 --- a/src/core/Variant.cpp +++ b/src/core/Variant.cpp @@ -261,14 +261,12 @@ Variant::operator RID() const { } Variant::operator Dictionary() const { - Dictionary ret; - *(godot_dictionary *)&ret = godot::api->godot_variant_as_dictionary(&_godot_variant); + Dictionary ret(godot::api->godot_variant_as_dictionary(&_godot_variant)); return ret; } Variant::operator Array() const { - Array ret; - *(godot_array *)&ret = godot::api->godot_variant_as_array(&_godot_variant); + Array ret(godot::api->godot_variant_as_array(&_godot_variant)); return ret; } |