std::construct_at 使用 std::byte / unsigned char 数组中的内存

问题描述 投票:0回答:1

使用 std::byte / unsigned char 数组和 std::construct_at 来提供存储是一个非常常见的示例。

//say A is a NON standard-layout class user-defined class
alignas(A) std::byte storage[sizeof(A)];
new (reintrepret_cast<A*>(storage)) A;

但是,std::construct_at 接受指向对象的指针,而如果您reintrepre_cast 指向std::byte / unsigned char 数组的指针,它仍然应该指向std::byte / unsigned char 数组的第一个成员。那么上面的代码违法吗?如果是这样,如何提供指向 std::construct_at 的有效指针?

language-lawyer c++20 standards lifetime object-model
1个回答
1
投票

您可以按如下方式使用 std::construct_at :

alignas(A) unsigned char storage[sizeof(A)];

A* ptr = std::construct_at(reinterpret_cast<A*>(storage));
// do stuff with ptr
std::destroy_at(ptr);

您可以查看以下页面以获取有关construct_at的更多信息:https://en.cppreference.com/w/cpp/memory/construct_at

© www.soinside.com 2019 - 2024. All rights reserved.