一种解决方案是使用联合。使用联合,您可以为不同的结构使用相同的内存区域。例如,您可以在 union 中拥有一个 double 和一个 struct。它们共享相同的内存,您只能使用其中一个。您可以使用一些枚举来判断使用哪一个。
联合有点笨拙,因为它们使对象的使用更加棘手。编译器不知道如何构造、破坏或复制它们,因为许多对象可能共享相同的内存。这是一个小例子,如果我想节省内存,我将如何做到这一点(好吧,枚举需要四个字节,因此内存效率不高,但让我们忘记这一点;)
#include <cstdlib>
#include <iostream>
struct Vector
{
double x, y, z;
};
struct Element
{
enum Type { SCALAR, VECTOR };
Type type;
union {
double scalar;
Vector v;
} data;
};
int main(void)
{
Element vector_element;
vector_element.type = Element::VECTOR;
vector_element.data.v.x = 1;
vector_element.data.v.y = 2;
vector_element.data.v.z = 3;
Element scalar_element;
scalar_element.type = Element::SCALAR;
scalar_element.data.scalar = 3.142;
std::cout << "The size of type Element without enum would be: " << (sizeof(Element) - sizeof(Element::Type)) << " bytes." << std::endl;
return EXIT_SUCCESS;
}
顺便说一句,由于某种奇怪的原因,这导致了 28 个字节。我预计 3 * 8 = 24 字节。