【发布时间】:2021-08-02 10:37:20
【问题描述】:
静态内存部分alignas(alignof(T)) char bytes[sizeof(T)] 是否适合通过调用std::construct_at(bytes, ...) / std::destroy_at(bytes) 在其生命周期内保存T 的实例?我的直觉说,是的,对齐和大小要求是有保证的,所以在构造之后(因为也有简单可构造的类型,我更喜欢称它为初始化)reinterpret_cast<T*>(bytes) 是一个指向完全有效类型T 实例的有效指针.
我错过了什么吗?
PS:我也可以写 std::aligned_storage_t<sizeof(T), alignof(T)> bytes - 在这种情况下,它的内存将被引用为 &bytes 或 std::addressof(bytes)。
【问题讨论】:
标签: c++ memory language-lawyer memory-alignment object-lifetime