diff options
Diffstat (limited to 'core/variant/variant_internal.h')
-rw-r--r-- | core/variant/variant_internal.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/core/variant/variant_internal.h b/core/variant/variant_internal.h index b7bd2a9c8c..8013c1a32a 100644 --- a/core/variant/variant_internal.h +++ b/core/variant/variant_internal.h @@ -1534,14 +1534,14 @@ struct VariantTypeAdjust<Object *> { template <class T> struct VariantTypeConstructor { - _FORCE_INLINE_ static void variant_from_type(void *p_variant, void *p_value) { - Variant *variant = reinterpret_cast<Variant *>(p_variant); - VariantInitializer<T>::init(variant); - VariantInternalAccessor<T>::set(variant, *((T *)p_value)); + _FORCE_INLINE_ static void variant_from_type(void *r_variant, void *p_value) { + // r_variant is provided by caller as uninitialized memory + memnew_placement(r_variant, Variant(*((T *)p_value))); } - _FORCE_INLINE_ static void type_from_variant(void *p_value, void *p_variant) { - *((T *)p_value) = VariantInternalAccessor<T>::get(reinterpret_cast<Variant *>(p_variant)); + _FORCE_INLINE_ static void type_from_variant(void *r_value, void *p_variant) { + // r_value is provided by caller as uninitialized memory + memnew_placement(r_value, T(VariantInternalAccessor<T>::get(reinterpret_cast<Variant *>(p_variant)))); } }; |