gpt4 book ai didi

c++ - 如何使用 std::aligned_union

转载 作者:可可西里 更新时间:2023-11-01 17:16:01 36 4
gpt4 key购买 nike

在尝试学习如何使用 std::aligned_union 时,我找不到任何示例。我的尝试遇到了我不知道如何解决的问题。

struct include
{
std::string file;
};
struct use
{
use(const std::string &from, const std::string &to) : from{ from }, to{ to }
{
}
std::string from;
std::string to;
};
std::aligned_union<sizeof(use), include, use>::type item;
*reinterpret_cast<use*>(&item_) = use{ from, to };

当我尝试在 VC++2013 Debug模式下运行程序时,我在 memcpy(unsigned char * dst, unsigned char * src, unsigned long count) 中遇到运行时错误。我假设这就是 VC++ 实现临时赋值的方式。

我要如何更改它才能避免出现此问题?

最佳答案

aligned_union 类型为您提供了适合存储所需类的 POD 类型 - 它实际上不是该类型的对象。您仍然需要构建自己的对象:

#include <memory>

{
std::aligned_union<sizeof(use), include, use>::type storage;

use * p = new (static_cast<void*>(std::addressof(storage))) use(from, to);

// ...

p->~use();
}

关于c++ - 如何使用 std::aligned_union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568618/

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