move destructor auto bind to class_bind ctor

This commit is contained in:
BlackMATov
2023-01-11 13:40:18 +07:00
parent 09f99b005d
commit 0e2d886d45
4 changed files with 11 additions and 15 deletions

View File

@@ -62,5 +62,5 @@ TEST_CASE("meta/meta_examples/inplace") {
CHECK(ivec2_length2(ivec2_ptr) == 13); CHECK(ivec2_length2(ivec2_ptr) == 13);
// you must manually call the object's destructor // you must manually call the object's destructor
ivec2_type.destroy_at(ivec2_buffer.get_memory()); CHECK(ivec2_type.destroy_at(ivec2_buffer.get_memory()));
} }

View File

@@ -3655,13 +3655,7 @@ namespace meta_hpp
template < detail::class_kind Class > template < detail::class_kind Class >
class_bind<Class> class_(metadata_map metadata = {}) { class_bind<Class> class_(metadata_map metadata = {}) {
class_bind<Class> bind{std::move(metadata)}; return class_bind<Class>{std::move(metadata)};
if constexpr ( std::is_destructible_v<Class> ) {
bind.destructor_();
}
return bind;
} }
template < detail::enum_kind Enum > template < detail::enum_kind Enum >
@@ -3812,6 +3806,10 @@ namespace meta_hpp
: data_{detail::type_access(resolve_type<Class>())} { : data_{detail::type_access(resolve_type<Class>())} {
data_->metadata.swap(metadata); data_->metadata.swap(metadata);
data_->metadata.merge(metadata); data_->metadata.merge(metadata);
if constexpr ( std::is_destructible_v<Class> ) {
destructor_();
}
} }
template < detail::class_kind Class > template < detail::class_kind Class >

View File

@@ -419,13 +419,7 @@ namespace meta_hpp
template < detail::class_kind Class > template < detail::class_kind Class >
class_bind<Class> class_(metadata_map metadata = {}) { class_bind<Class> class_(metadata_map metadata = {}) {
class_bind<Class> bind{std::move(metadata)}; return class_bind<Class>{std::move(metadata)};
if constexpr ( std::is_destructible_v<Class> ) {
bind.destructor_();
}
return bind;
} }
template < detail::enum_kind Enum > template < detail::enum_kind Enum >

View File

@@ -17,6 +17,10 @@ namespace meta_hpp
: data_{detail::type_access(resolve_type<Class>())} { : data_{detail::type_access(resolve_type<Class>())} {
data_->metadata.swap(metadata); data_->metadata.swap(metadata);
data_->metadata.merge(metadata); data_->metadata.merge(metadata);
if constexpr ( std::is_destructible_v<Class> ) {
destructor_();
}
} }
template < detail::class_kind Class > template < detail::class_kind Class >