summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsheepandshepherd <sheepandshepherd@hotmail.com>2019-12-04 03:27:39 +0100
committersheepandshepherd <sheepandshepherd@hotmail.com>2019-12-04 03:27:39 +0100
commit95feb486c9968c4489f092df4232326d8ab7debf (patch)
treee16ba08b5b84c05e6d440cf8457631345b2a8aea
parent123d9f0e9264dcc7206888fc96419b32feef00c8 (diff)
downloadredot-cpp-95feb486c9968c4489f092df4232326d8ab7debf.tar.gz
Fix leaks caused by implicitly called copy constructors
-rw-r--r--src/core/Variant.cpp55
1 files changed, 33 insertions, 22 deletions
diff --git a/src/core/Variant.cpp b/src/core/Variant.cpp
index a013639..4c5cfe6 100644
--- a/src/core/Variant.cpp
+++ b/src/core/Variant.cpp
@@ -205,8 +205,9 @@ Variant::operator double() const {
return godot::api->godot_variant_as_real(&_godot_variant);
}
Variant::operator String() const {
- godot_string s = godot::api->godot_variant_as_string(&_godot_variant);
- return *(String *)&s;
+ String ret;
+ *(godot_string *)&ret = godot::api->godot_variant_as_string(&_godot_variant);
+ return ret;
}
Variant::operator Vector2() const {
godot_vector2 s = godot::api->godot_variant_as_vector2(&_godot_variant);
@@ -250,8 +251,9 @@ Variant::operator Color() const {
return *(Color *)&s;
}
Variant::operator NodePath() const {
- godot_node_path s = godot::api->godot_variant_as_node_path(&_godot_variant);
- return *(NodePath *)&s;
+ NodePath ret;
+ *(godot_node_path *)&ret = godot::api->godot_variant_as_node_path(&_godot_variant);
+ return ret;
}
Variant::operator RID() const {
godot_rid s = godot::api->godot_variant_as_rid(&_godot_variant);
@@ -259,42 +261,51 @@ Variant::operator RID() const {
}
Variant::operator Dictionary() const {
- godot_dictionary d = godot::api->godot_variant_as_dictionary(&_godot_variant);
- return *(Dictionary *)&d;
+ Dictionary ret;
+ *(godot_dictionary *)&ret = godot::api->godot_variant_as_dictionary(&_godot_variant);
+ return ret;
}
Variant::operator Array() const {
- godot_array s = godot::api->godot_variant_as_array(&_godot_variant);
- return *(Array *)&s;
+ Array ret;
+ *(godot_array *)&ret = godot::api->godot_variant_as_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolByteArray() const {
- godot_pool_byte_array s = godot::api->godot_variant_as_pool_byte_array(&_godot_variant);
- return *(PoolByteArray *)&s;
+ PoolByteArray ret;
+ *(godot_pool_byte_array *)&ret = godot::api->godot_variant_as_pool_byte_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolIntArray() const {
- godot_pool_int_array s = godot::api->godot_variant_as_pool_int_array(&_godot_variant);
- return *(PoolIntArray *)&s;
+ PoolIntArray ret;
+ *(godot_pool_int_array *)&ret = godot::api->godot_variant_as_pool_int_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolRealArray() const {
- godot_pool_real_array s = godot::api->godot_variant_as_pool_real_array(&_godot_variant);
- return *(PoolRealArray *)&s;
+ PoolRealArray ret;
+ *(godot_pool_real_array *)&ret = godot::api->godot_variant_as_pool_real_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolStringArray() const {
- godot_pool_string_array s = godot::api->godot_variant_as_pool_string_array(&_godot_variant);
- return *(PoolStringArray *)&s;
+ PoolStringArray ret;
+ *(godot_pool_string_array *)&ret = godot::api->godot_variant_as_pool_string_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolVector2Array() const {
- godot_pool_vector2_array s = godot::api->godot_variant_as_pool_vector2_array(&_godot_variant);
- return *(PoolVector2Array *)&s;
+ PoolVector2Array ret;
+ *(godot_pool_vector2_array *)&ret = godot::api->godot_variant_as_pool_vector2_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolVector3Array() const {
- godot_pool_vector3_array s = godot::api->godot_variant_as_pool_vector3_array(&_godot_variant);
- return *(PoolVector3Array *)&s;
+ PoolVector3Array ret;
+ *(godot_pool_vector3_array *)&ret = godot::api->godot_variant_as_pool_vector3_array(&_godot_variant);
+ return ret;
}
Variant::operator PoolColorArray() const {
- godot_pool_color_array s = godot::api->godot_variant_as_pool_color_array(&_godot_variant);
- return *(PoolColorArray *)&s;
+ PoolColorArray ret;
+ *(godot_pool_color_array *)&ret = godot::api->godot_variant_as_pool_color_array(&_godot_variant);
+ return ret;
}
Variant::operator godot_object *() const {
return godot::api->godot_variant_as_object(&_godot_variant);