549 字
3 分钟
Interview
2025-11-08

面试题#

向对象的三大特性#

多态是C++面向对象的三大特性之一,可以同一操作作用与不同的对象,可以有不同的解释和执行结果

继承是C++面向对象的三大特性之一,允许一个新类获得现有类的长远 变量和成员函数

封装隐藏对象的内部细节,只对外暴露有限的,受控的接口

内存对齐#

当我们再C++中定定义一个结构体或类时,编译器为了提高效率和满足硬件要求,不会简单地把成员变量紧密挨个存放,而是再成员之间填充额外的字节,是每个成员都为于一个合适的内存地址上

有两个好处:

硬件限制和效率提升

平台可移植性

实现方式:

alignas(n) (C++11 标准): 这是一个更现代、更可移植的关键字,可以用于指定单个变量或结构体的对齐要求

深拷贝和浅拷贝#

C++默认的拷贝方式是浅拷贝,浅拷贝制度称单纯将成员变量逐个复制

  • 首先对于栈上的基本成员,浅拷贝没有问题,复制值的本身
  • 对于指向堆上指针成员,浅拷贝只会复制指针变量的地址值,而不会复制指针指向的实际数据

后果: 两个对象的指针指向了同一块堆内存,当其中一个对象修改了这块内存中的数据时,另一个对象的数据也会被修改

致命问题:其中一个对象被销毁时,会释放这块共享的堆内存,当另一个对象释放这块内存时,会导致二次释放,从而引发程序崩溃未定义行为

如何解决:深拷贝不仅复制对象本身,还会未对象持有的资源重新分配一块独立的内存,然后将原对象的内存复制到这块新内存中

实现方式:必须显示的定义类的拷贝构造函数和拷贝赋值运算符