20230921研发面经总结

1.cpp中引用和指针的区别

引用是在概念上定义一个变量的别名,而指针是存储一个变量的地址。
引用必须从一而终,不能再指向其他数据;指针可以随意改变指向。
引用在定义时必须初始化,而指针是最好初始化,不初始化也不会报错。
指针可以有多级,引用不可以。
存在空指针,但是不存在空引用。

2.介绍const,各种使用情况的效果

1.const修饰变量位常量不可修改
20230921研发面经总结_第1张图片
2.const修饰指针,看右侧

3.const修饰形参,防止修改,常量引用修饰;也可以修饰结构体形参

4.成员函数后加const,不可以修改成员属性
5.常对象const不可以改成愿变量值,但是mutable可以修改

3.右值引用和move的底层实现

左值:表示一个占据内存中某个可识别的位置(也就是一个地址)的对象。
右值:即非左值,也就一个不表示内存中某个可识别位置的对象的表达式,右值的本质就是常量值或临时值
对表达式取地址,如果编译器不报错就为左值,否则为右值
语法:右值引用就是给右值取别名,通过&&声明,使用右值引用来优化程序性能,通过创建右值引用变量x、c和d,可以避免在每次调用函数func时创建临时变量。
20230921研发面经总结_第2张图片
右值引用优化性能,避免深拷贝
移动构造函数使用一个右值引用类型参数只有浅拷贝,提高性能

所谓移动语义,指的就是以移动而非深拷贝的方式初始化含有指针成员的类对象:之前的拷贝是对于别人的资源,自己重新分配一块内存存储复制过来的资源,而对于移动语义,类似于转让或者资源窃取的意思,对于那块资源,转为自己所拥有,别人不再拥有也不会再使用,通过 c++11 新增的移动语义可以省去很多拷贝负担,怎么利用移动语义呢,是通过移动构造函数。
移动语义可以将资源(堆、系统对象等)通过浅拷贝方式从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,可以大幅度提高 c++ 应用程序的性能,消除临时对象的维护(创建和销毁)对性能的影响。

4.move什么时候用好,why

std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义

std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝所以可以提高利用效率,改善性能.

1.移动语义适用于需要转移对象资源所有权的情况,避免进行不必要的数据拷贝
2.容器操作示例
3.返回右值
4.资源管理中转移对象的所有权,确保资源的正确释放和避免资源泄漏

5.拷贝构造器和移动构造器

拷贝构造函数用于从一个已存在的对象创建一个新的对象,即复制构造函数。它通常有一个类对象作为参数,返回一个新的对象,该对象与原始对象具有相同的值。如果一个类没有定义拷贝构造函数,则编译器会生成一个默认的拷贝构造函数,它将逐个复制所有非静态成员

移动构造函数和移动赋值运算符是 C++11 中引入的新特性,用于从一个临时对象创建一个新对象,以提高效率和减少内存使用。它们采用右值引用的语法,并将临时对象的资源移动到新对象中,而不是复制它们。

1.功能不同:拷贝构造函数用于从一个已存在的对象创建一个新的对象,即复制构造函数。它会复制原始对象的所有成员变量的值,从而创建一个新的、与原始对象相同的对象。移动构造函数用于从一个右值引用的临时对象创建一个新的对象。它会“窃取”原始对象的资源

2.形参不同:
20230921研发面经总结_第3张图片
3.调用时机不同:
20230921研发面经总结_第4张图片

4.适用范围不同:
在这里插入图片描述

6.set和vector的底层

20230921研发面经总结_第5张图片
20230921研发面经总结_第6张图片
20230921研发面经总结_第7张图片
unordered_xxx都是哈希表做底层

7.cpp多态的理念和底层实现

20230921研发面经总结_第8张图片

8.智能指针介绍

一句话带过:智能指针就是帮我们C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!

9.shared_ptr中计数器的实现

只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心在哪里写delete p语句——实际上根本不需要编写这条语句,托管 p 的 shared_ptr 对象在消亡时会自动执行delete p。而且,该 shared_ptr 对象能像指针 p —样使用,即假设托管 p 的 shared_ptr 对象叫作 ptr,那么 *ptr 就是 p 指向的对象

20230921研发面经总结_第9张图片

10.TCP的标识位字段有啥

你可能感兴趣的:(java)