gpt4 book ai didi

c++ - 放置-新地址对齐

转载 作者:IT老高 更新时间:2023-10-28 23:10:47 33 4
gpt4 key购买 nike

根据https://isocpp.org/wiki/faq/dtors#placement-new传递给placement-new的地址必须正确对齐。但它给出的例子似乎与此相矛盾。

char memory[sizeof(Fred)];

这个缓冲区很可能与 Fred 对齐,因为它是一个愚蠢的 char[],所以 memory 几乎可以指向任何地方.然后在这个地址上做placement-new。

该示例是否与 DANGER 脚注中所说的对齐要求相矛盾?

这就引出了一个相关的问题:

如何为类型 T 创建一个 对齐 的缓冲区(堆栈或堆)(用于一个或多个 T 对象的placement-new) ?

缓冲区是指某种大小的 char[]void* 缓冲区,而不是 T[] 因为那将是对象分配,这破坏了事后做placement-new的意义。

谢谢。

最佳答案

使用 alignas 关键字:

alignas(Fred) char buf[sizeof(Fred)];
::new (static_cast<void*>(buf)) Fred;

如果您更喜欢围绕此构造的库包装器,请使用 std::aligned_storage

关于c++ - 放置-新地址对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521605/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com