Creating/destroying 静态内存部分中的一个对象
Creating/destroying an object in a static memory section
静态内存部分 alignas(alignof(T)) char bytes[sizeof(T)]
是否适合通过调用 std::construct_at(bytes, ...)
/ std::destroy_at(bytes)
在其生命周期内保存 T
的实例?我的直觉说,是的,对齐和大小要求得到保证,所以在构造之后(因为也有平凡的可构造类型,我更喜欢称之为初始化)reinterpret_cast<T*>(bytes)
是指向类型 [ 的完全有效实例的有效指针=12=].
我是不是漏掉了什么?
PS:我也可以写 std::aligned_storage_t<sizeof(T), alignof(T)> bytes
- 在这种情况下,它的内存将被引用为 &bytes
或 std::addressof(bytes)
.
Is the static memory section alignas(alignof(T)) char bytes[sizeof(T)]
suitable to hold an instance of T during its lifetime by calling std::construct_at(bytes, ...)
/ std::destroy_at(bytes)
?
是的。
reinterpret_cast<T*>(bytes)
is a valid pointer to a completely valid instance of type T.
Am I missing something?
您仍然需要清洗指向重用内存的指针:
T* ptr1 = std::construct_at(reinterpret_cast<T*>(bytes), ...); // valid
T* ptr2 = std::launder(reinterpret_cast<T*>(bytes)); // valid
std::destroy_at(ptr2); // valid, just like std::destroy_at(ptr1)
静态内存部分 alignas(alignof(T)) char bytes[sizeof(T)]
是否适合通过调用 std::construct_at(bytes, ...)
/ std::destroy_at(bytes)
在其生命周期内保存 T
的实例?我的直觉说,是的,对齐和大小要求得到保证,所以在构造之后(因为也有平凡的可构造类型,我更喜欢称之为初始化)reinterpret_cast<T*>(bytes)
是指向类型 [ 的完全有效实例的有效指针=12=].
我是不是漏掉了什么?
PS:我也可以写 std::aligned_storage_t<sizeof(T), alignof(T)> bytes
- 在这种情况下,它的内存将被引用为 &bytes
或 std::addressof(bytes)
.
Is the static memory section
alignas(alignof(T)) char bytes[sizeof(T)]
suitable to hold an instance of T during its lifetime by callingstd::construct_at(bytes, ...)
/std::destroy_at(bytes)
?
是的。
reinterpret_cast<T*>(bytes)
is a valid pointer to a completely valid instance of type T.Am I missing something?
您仍然需要清洗指向重用内存的指针:
T* ptr1 = std::construct_at(reinterpret_cast<T*>(bytes), ...); // valid
T* ptr2 = std::launder(reinterpret_cast<T*>(bytes)); // valid
std::destroy_at(ptr2); // valid, just like std::destroy_at(ptr1)