小编luk*_*uss的帖子

联合如何根据对象列表确定最大大小?

我不确定问题是否妥善,因为我理解了如何,但我不知道用不明白的东西写问题.这里是:

我有一些课程:

class Animal{};
class Rabbit{}: public Animal;
class Horse{}: public Animal;
class Mouse{}: public Animal;
class Pony{}: public Horse;
Run Code Online (Sandbox Code Playgroud)

我的目标是从此对象列表中找到最大大小,以便在之后的内存分配中使用它.我已将每个sizeof对象存储在一个数组中,然后获取数组的最大值.上级(我发送代码进行审核)建议我使用union来在编译前的时间找到最大的大小.这个想法对我来说似乎很好,所以我这样做了:

typedef union
{
  Rabbit rabbitObject;
  Horse horseObject;
  Mouse mouseObject;
  Pony ponyObject;
} Size;
Run Code Online (Sandbox Code Playgroud)

...因为union根据最大元素分配内存.下一个建议就是这样做:

typedef union
{
   unsigned char RabbitObject[sizeof(Rabbit)];
   unsigned char HorseObject[sizeof(Horse)];
   unsigned char MouseObject[sizeof(Mouse)];
   unsigned char PonyObject[sizeof(Pony)];
} Interesting;
Run Code Online (Sandbox Code Playgroud)

我的问题是:

Interestingunion 如何获得对象的最大大小?对我来说,创建一个unsigned char类型的数组是没有意义的sizeof(class).为什么第二个选项可以解决问题,而之前的联盟却没有?背后发生了什么,我想念?

PS:条件是这样的,我不能亲自问这个家伙.

先感谢您

c++

1
推荐指数
1
解决办法
127
查看次数

标签 统计

c++ ×1