19. struct,union和enum简单模拟variant

两个结构体赋值时,如果存在指针成员,这时候复制了指针的值,而不是指针目标的值,称为浅拷贝。函数调用传递结构体而不是结构体指针时,隐含浅拷贝,这点需要注意。

 

避免两个结构体中的指针成员引用同一资源的方法:

1.如果有条件,让每个结构体变量中的指针成员各自拥有独立的资源(深拷贝)。

2.引用计数,所有结构体变量中的指针成员同时引用同一资源,但记录引用情况,满足条件则真正处理该资源。

 

给union 中的成员赋值时,相当于获取union 变量的地址并强制转换成对应类型的指针,再往里写入数据。

union MyUnion {

char c;

int i;

float f;

double d;

};

 

MyUnion me;

me.c = 'A';

*(char *)&me = 'A';

 

me.i = 999;

*(int *)&me = 999;

 

me.f = 99.9f;

*(float *)&me = 99.9f;

 

me.d = 99.9;

*(double *)&me = 99.9;

 

枚举只能代替符号化整形宏。

变体的一种实现思路是,利用enum设置类型,union设置各种要包含的类型,并定义一组set/get函数,编译器配合不显示函数名的话,看起来就像:

a = 123;

a = 99.8;

a = 'A';

a = "Hello";

 

posted @ 2020-04-30 09:38  八转达人  阅读(190)  评论(0编辑  收藏  举报