我明白,有了工会,所有的成员都有着相同的记忆。对于结构,它们不共享内存,因此将内存中的不同空间分配给结构的每个成员。
我的解决方案要求我创建一个结构,它只在存储在结构中的一个类型中存储值;表现得像一个联合。我不能使用联合的原因是因为指定的“类型”之一是字符串,并且您不能在联合中包含字符串变量。如何确保每次只有一个结构成员占用内存中的空间?
发布于 2017-01-06 17:43:22
如何确保每次只有一个结构成员占用内存中的空间?
如果编译器( std::any )支持,则可以使用std::variant或C++17,也可以使用模板类型。
template <typename T>
struct wrap
{
T elem;
};发布于 2017-01-06 17:47:24
您将需要一个缓冲区(大小为max(sizeof(T1), sizeof(T2), sizeof(T3)...))、新位置和一个枚举变量来记住当前缓冲区中的哪个对象。这被称为“有标签的联盟”。然后,您需要编写成员函数来安全地控制这个人工受精对象的生存期。最后,您需要花几天的时间来解决任何对齐需求。
但这正是boost::variant所做的很快也会是std::variant的。
发布于 2017-01-06 17:43:15
你不能。结构的大小总是一样的。创建结构时,编译器为结构中的每个成员变量预留空间,并将其定义为结构的大小。当您的代码要求内存管理器为结构分配内存时,无论是否使用所有变量,它总是分配相同的内存量。
您最好的选择是将字符串转换为可以在联合中使用的另一种类型,例如固定大小的字符数组。
https://stackoverflow.com/questions/41511172
复制相似问题