mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-15 03:45:30 +07:00
replace raw new/delete calls to std::construct/destroy_at
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <new>
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <span>
|
#include <span>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <new>
|
#include <memory>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
@@ -125,21 +125,23 @@ namespace meta_hpp::detail
|
|||||||
const Fp& src = *buffer_cast<Fp>(self.buffer_);
|
const Fp& src = *buffer_cast<Fp>(self.buffer_);
|
||||||
return std::invoke(src, std::forward<Args>(args)...);
|
return std::invoke(src, std::forward<Args>(args)...);
|
||||||
},
|
},
|
||||||
|
|
||||||
.move = +[](fixed_function& from, fixed_function& to) noexcept {
|
.move = +[](fixed_function& from, fixed_function& to) noexcept {
|
||||||
assert(from && !to); // NOLINT
|
assert(from && !to); // NOLINT
|
||||||
|
|
||||||
Fp& src = *buffer_cast<Fp>(from.buffer_);
|
Fp& src = *buffer_cast<Fp>(from.buffer_);
|
||||||
::new (buffer_cast<Fp>(to.buffer_)) Fp(std::move(src));
|
std::construct_at(buffer_cast<Fp>(to.buffer_), std::move(src));
|
||||||
src.~Fp();
|
std::destroy_at(&src);
|
||||||
|
|
||||||
to.vtable_ = from.vtable_;
|
to.vtable_ = from.vtable_;
|
||||||
from.vtable_ = nullptr;
|
from.vtable_ = nullptr;
|
||||||
},
|
},
|
||||||
|
|
||||||
.destroy = +[](fixed_function& self){
|
.destroy = +[](fixed_function& self){
|
||||||
assert(self); // NOLINT
|
assert(self); // NOLINT
|
||||||
|
|
||||||
Fp& src = *buffer_cast<Fp>(self.buffer_);
|
Fp& src = *buffer_cast<Fp>(self.buffer_);
|
||||||
src.~Fp();
|
std::destroy_at(&src);
|
||||||
|
|
||||||
self.vtable_ = nullptr;
|
self.vtable_ = nullptr;
|
||||||
},
|
},
|
||||||
@@ -156,7 +158,7 @@ namespace meta_hpp::detail
|
|||||||
static_assert(std::is_invocable_r_v<R, Fp, Args...>);
|
static_assert(std::is_invocable_r_v<R, Fp, Args...>);
|
||||||
static_assert(std::is_nothrow_move_constructible_v<Fp>);
|
static_assert(std::is_nothrow_move_constructible_v<Fp>);
|
||||||
|
|
||||||
::new (buffer_cast<Fp>(dst.buffer_)) Fp(std::forward<Functor>(functor));
|
std::construct_at(buffer_cast<Fp>(dst.buffer_), std::forward<Functor>(functor));
|
||||||
|
|
||||||
dst.vtable_ = vtable_t::get<Fp>();
|
dst.vtable_ = vtable_t::get<Fp>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace meta_hpp
|
|||||||
std::is_nothrow_move_constructible_v<Tp>;
|
std::is_nothrow_move_constructible_v<Tp>;
|
||||||
|
|
||||||
if constexpr ( in_buffer ) {
|
if constexpr ( in_buffer ) {
|
||||||
::new (buffer_cast<Tp>(dst.storage_.emplace<buffer_t>())) Tp(std::forward<T>(val));
|
std::construct_at(buffer_cast<Tp>(dst.storage_.emplace<buffer_t>()), std::forward<T>(val));
|
||||||
} else {
|
} else {
|
||||||
dst.storage_.emplace<void*>(std::make_unique<Tp>(std::forward<T>(val)).release());
|
dst.storage_.emplace<void*>(std::make_unique<Tp>(std::forward<T>(val)).release());
|
||||||
}
|
}
|
||||||
@@ -138,8 +138,8 @@ namespace meta_hpp
|
|||||||
},
|
},
|
||||||
[&to](buffer_t& buffer) {
|
[&to](buffer_t& buffer) {
|
||||||
Tp& src = *buffer_cast<Tp>(buffer);
|
Tp& src = *buffer_cast<Tp>(buffer);
|
||||||
::new (buffer_cast<Tp>(to.storage_.emplace<buffer_t>())) Tp(std::move(src));
|
std::construct_at(buffer_cast<Tp>(to.storage_.emplace<buffer_t>()), std::move(src));
|
||||||
src.~Tp();
|
std::destroy_at(&src);
|
||||||
},
|
},
|
||||||
[](...){}
|
[](...){}
|
||||||
}, from.storage_);
|
}, from.storage_);
|
||||||
@@ -158,7 +158,7 @@ namespace meta_hpp
|
|||||||
},
|
},
|
||||||
[&to](const buffer_t& buffer) {
|
[&to](const buffer_t& buffer) {
|
||||||
const Tp& src = *buffer_cast<Tp>(buffer);
|
const Tp& src = *buffer_cast<Tp>(buffer);
|
||||||
::new (buffer_cast<Tp>(to.storage_.emplace<buffer_t>())) Tp(src);
|
std::construct_at(buffer_cast<Tp>(to.storage_.emplace<buffer_t>()), src);
|
||||||
},
|
},
|
||||||
[](...){}
|
[](...){}
|
||||||
}, from.storage_);
|
}, from.storage_);
|
||||||
@@ -176,7 +176,7 @@ namespace meta_hpp
|
|||||||
},
|
},
|
||||||
[](buffer_t& buffer) {
|
[](buffer_t& buffer) {
|
||||||
Tp& src = *buffer_cast<Tp>(buffer);
|
Tp& src = *buffer_cast<Tp>(buffer);
|
||||||
src.~Tp();
|
std::destroy_at(&src);
|
||||||
},
|
},
|
||||||
[](...){}
|
[](...){}
|
||||||
}, self.storage_);
|
}, self.storage_);
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <new>
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <span>
|
#include <span>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
@@ -427,21 +426,23 @@ namespace meta_hpp::detail
|
|||||||
const Fp& src = *buffer_cast<Fp>(self.buffer_);
|
const Fp& src = *buffer_cast<Fp>(self.buffer_);
|
||||||
return std::invoke(src, std::forward<Args>(args)...);
|
return std::invoke(src, std::forward<Args>(args)...);
|
||||||
},
|
},
|
||||||
|
|
||||||
.move = +[](fixed_function& from, fixed_function& to) noexcept {
|
.move = +[](fixed_function& from, fixed_function& to) noexcept {
|
||||||
assert(from && !to); // NOLINT
|
assert(from && !to); // NOLINT
|
||||||
|
|
||||||
Fp& src = *buffer_cast<Fp>(from.buffer_);
|
Fp& src = *buffer_cast<Fp>(from.buffer_);
|
||||||
::new (buffer_cast<Fp>(to.buffer_)) Fp(std::move(src));
|
std::construct_at(buffer_cast<Fp>(to.buffer_), std::move(src));
|
||||||
src.~Fp();
|
std::destroy_at(&src);
|
||||||
|
|
||||||
to.vtable_ = from.vtable_;
|
to.vtable_ = from.vtable_;
|
||||||
from.vtable_ = nullptr;
|
from.vtable_ = nullptr;
|
||||||
},
|
},
|
||||||
|
|
||||||
.destroy = +[](fixed_function& self){
|
.destroy = +[](fixed_function& self){
|
||||||
assert(self); // NOLINT
|
assert(self); // NOLINT
|
||||||
|
|
||||||
Fp& src = *buffer_cast<Fp>(self.buffer_);
|
Fp& src = *buffer_cast<Fp>(self.buffer_);
|
||||||
src.~Fp();
|
std::destroy_at(&src);
|
||||||
|
|
||||||
self.vtable_ = nullptr;
|
self.vtable_ = nullptr;
|
||||||
},
|
},
|
||||||
@@ -458,7 +459,7 @@ namespace meta_hpp::detail
|
|||||||
static_assert(std::is_invocable_r_v<R, Fp, Args...>);
|
static_assert(std::is_invocable_r_v<R, Fp, Args...>);
|
||||||
static_assert(std::is_nothrow_move_constructible_v<Fp>);
|
static_assert(std::is_nothrow_move_constructible_v<Fp>);
|
||||||
|
|
||||||
::new (buffer_cast<Fp>(dst.buffer_)) Fp(std::forward<Functor>(functor));
|
std::construct_at(buffer_cast<Fp>(dst.buffer_), std::forward<Functor>(functor));
|
||||||
|
|
||||||
dst.vtable_ = vtable_t::get<Fp>();
|
dst.vtable_ = vtable_t::get<Fp>();
|
||||||
}
|
}
|
||||||
@@ -8089,7 +8090,7 @@ namespace meta_hpp
|
|||||||
std::is_nothrow_move_constructible_v<Tp>;
|
std::is_nothrow_move_constructible_v<Tp>;
|
||||||
|
|
||||||
if constexpr ( in_buffer ) {
|
if constexpr ( in_buffer ) {
|
||||||
::new (buffer_cast<Tp>(dst.storage_.emplace<buffer_t>())) Tp(std::forward<T>(val));
|
std::construct_at(buffer_cast<Tp>(dst.storage_.emplace<buffer_t>()), std::forward<T>(val));
|
||||||
} else {
|
} else {
|
||||||
dst.storage_.emplace<void*>(std::make_unique<Tp>(std::forward<T>(val)).release());
|
dst.storage_.emplace<void*>(std::make_unique<Tp>(std::forward<T>(val)).release());
|
||||||
}
|
}
|
||||||
@@ -8147,8 +8148,8 @@ namespace meta_hpp
|
|||||||
},
|
},
|
||||||
[&to](buffer_t& buffer) {
|
[&to](buffer_t& buffer) {
|
||||||
Tp& src = *buffer_cast<Tp>(buffer);
|
Tp& src = *buffer_cast<Tp>(buffer);
|
||||||
::new (buffer_cast<Tp>(to.storage_.emplace<buffer_t>())) Tp(std::move(src));
|
std::construct_at(buffer_cast<Tp>(to.storage_.emplace<buffer_t>()), std::move(src));
|
||||||
src.~Tp();
|
std::destroy_at(&src);
|
||||||
},
|
},
|
||||||
[](...){}
|
[](...){}
|
||||||
}, from.storage_);
|
}, from.storage_);
|
||||||
@@ -8167,7 +8168,7 @@ namespace meta_hpp
|
|||||||
},
|
},
|
||||||
[&to](const buffer_t& buffer) {
|
[&to](const buffer_t& buffer) {
|
||||||
const Tp& src = *buffer_cast<Tp>(buffer);
|
const Tp& src = *buffer_cast<Tp>(buffer);
|
||||||
::new (buffer_cast<Tp>(to.storage_.emplace<buffer_t>())) Tp(src);
|
std::construct_at(buffer_cast<Tp>(to.storage_.emplace<buffer_t>()), src);
|
||||||
},
|
},
|
||||||
[](...){}
|
[](...){}
|
||||||
}, from.storage_);
|
}, from.storage_);
|
||||||
@@ -8185,7 +8186,7 @@ namespace meta_hpp
|
|||||||
},
|
},
|
||||||
[](buffer_t& buffer) {
|
[](buffer_t& buffer) {
|
||||||
Tp& src = *buffer_cast<Tp>(buffer);
|
Tp& src = *buffer_cast<Tp>(buffer);
|
||||||
src.~Tp();
|
std::destroy_at(&src);
|
||||||
},
|
},
|
||||||
[](...){}
|
[](...){}
|
||||||
}, self.storage_);
|
}, self.storage_);
|
||||||
|
|||||||
Reference in New Issue
Block a user