C/C++面试整理

74 阅读2分钟

struct、class和union有哪些区别?

--- 浅析struct与union

  1. 成员的存储方式:

    1. struct:在结构体中,每个成员占据独立的内存空间,结构体的大小等于所有成员的大小之和。每个成员可以独立地访问和修改,互不干扰。
    2. union:联合(union)中的所有成员共用一块内存空间。联合的大小等于最大成员的大小。每次只能使用一个成员,不同成员之间的修改会影响到共享的内存空间。
  2. 内存的使用方式:

    1. struct:结构体的成员会一起占用内存,保留每个成员的值。结构体的大小是各个成员大小的总和。
    2. union:联合的成员共用同一块内存,同一时间只能使用一个成员,并且只有最后一个成员赋值的值是有效的。使用不同的成员会重写共享的内存空间。
  3. 数据访问方式:

    1. struct:结构体的各个成员可以独立地访问和修改,通过成员名和结构体变量使用点运算符(.)进行访问。
    2. 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 中被移除不可用了)