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

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

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

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

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

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

union MyUnion {

char c;

int i;

float f;

扫描二维码关注公众号,回复: 11154072 查看本文章

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";

猜你喜欢

转载自www.cnblogs.com/Nutshelln/p/12806890.html