struct、class和union有哪些区别?
--- 浅析struct与union
-
成员的存储方式:
- struct:在结构体中,每个成员占据独立的内存空间,结构体的大小等于所有成员的大小之和。每个成员可以独立地访问和修改,互不干扰。
- union:联合(union)中的所有成员共用一块内存空间。联合的大小等于最大成员的大小。每次只能使用一个成员,不同成员之间的修改会影响到共享的内存空间。
-
内存的使用方式:
- struct:结构体的成员会一起占用内存,保留每个成员的值。结构体的大小是各个成员大小的总和。
- union:联合的成员共用同一块内存,同一时间只能使用一个成员,并且只有最后一个成员赋值的值是有效的。使用不同的成员会重写共享的内存空间。
-
数据访问方式:
- struct:结构体的各个成员可以独立地访问和修改,通过成员名和结构体变量使用点运算符(.)进行访问。
- union:联合的成员共享同一块内存,因此只能通过联合变量来访问成员。通过联合变量使用点运算符(.)访问成员,或者通过union类型的指针来访问。
基础篇: struct,class和union
class 和 struct 的唯一区别,是访问权限(包括继承的访问权限)默认是 private 还是 public。
其它方面 class 和 struct 完全一样。
实际上,现代 C++ 代码基本上推荐写 struct 禁 class (因为写在头文件里的内容都是接口,接口默认就该 public)
智能指针
C++ 标准一共有四种智能指针:
- unique_ptr
- shared_ptr
- weak_ptr(解决循环依赖,充当proxy的角色,一般weak_ptr是代理包裹一个shared_ptr):
- auto_ptr(auto_ptr 在 C++11 已被摒弃,C++17 中被移除不可用了)