C++ 常见面试知识点

devtools/2025/2/28 21:38:17/

主要介绍C++常见面试

1、说一下你理解的C++中的四种智能指针

常用接口
T* get();
T& operator*();
T* operator->();
T& operator=(const T& val);
T* release(); 将 封装在内部的指针置为nullptr, 但并不会破坏指针所指向的内容, 函
数返回的是内部指针置空之前的值;
void reset (T* ptr = nullptr);直接释放封装的内部指针所指向的内存, 如果指定了 ptr 的值, 则将内部指针初始化为该值 (否则将其设置为nullptr)

weak_ptr(弱引⽤)
解决shared_ptr循环引用导致内存泄漏问题。 2层shared_ptr

2、C++ 中内存分配情况

栈:由编译器管理分配和回收,存放局部变量和函数参数。
堆:由程序员管理,需要⼿动 new malloc delete free 进⾏分配和回收,空间较⼤,但可能会
出现内存泄漏和空闲碎⽚的情况。
全局/静态存储区:分为初始化和未初始化两个相邻区域,存储初始化和未初始化的全局变量
和静态变量。
常量存储区:存储常量,⼀般不允许修改。
代码区:存放程序的⼆进制代码。
在这里插入图片描述

3、C++ 中的指针参数传递和引⽤参数传递

指针传递是值传递
引用是别名,共享内存。传引⽤的实质是传地址,传递的是变量的地址。

4、说⼀下 C++ ⾥是怎么定义常量的?常量存放在内存的哪个位置?

对于局部常量,存放在栈区;
对于全局常量,编译期⼀般不分配内存,放在符号表中以提⾼访问效率;
字⾯值常量,⽐如字符串,放在常量区。

5、⽆参数构造函数什么时候生成

⽆参数构造函数:即默认构造函数,无任何构造函数,编译器会自动生成。

6、 野指针与悬空指针有什么区别?

野指针(wild pointer):就是没有被初始化过的指针。
悬空指针:是指针最初指向的内存已经被释放了的⼀种指针。

7、 函数传递参数的⼏种⽅式

值传递:形参是实参的拷⻉,函数内部对形参的操作并不会影响到外部的实参。
指针传递:也是值传递的⼀种⽅式,形参是指向实参地址的指针,当对形参的指向操作时,就
相当于对实参本身进⾏操作。
引⽤传递:实际上就是把引⽤对象的地址放在了开辟的栈空间中,函数内部对形参的任何操作
可以直接映射到外部的实参上⾯。

8、new / delete ,malloc / free 区别

都可以⽤来在堆上分配和回收空间。new /delete 是操作符,malloc/free 是库函数。
执⾏ new 实际上执⾏两个过程:1.分配未初始化的内存空间(malloc);2.使⽤对象的构造
函数对空间进⾏初始化;返回空间的⾸地址。如果在第⼀步分配空间中出现问题,则抛出
std::bad_alloc 异常,或被某个设定的异常处理函数捕获处理;如果在第⼆步构造对象时出现
异常,则⾃动调⽤ delete 释放内存。
执⾏ delete 实际上也有两个过程:1. 使⽤析构函数对对象进⾏析构;2.回收内存空间
(free)。

new 得到的是经过初始化的空间,⽽ malloc 得到的是未初始化的空间。

9、多态分类,有哪几种

静态多态,编译时多态主要通过函数重载和模板实现。
运行时多态主要通过虚函数和继承实现,其优点是灵活性高,可以在运行时根据实际对象类型来决定调用哪个函数。


http://www.ppmy.cn/devtools/163450.html

相关文章

零基础学QT、C++(四)QT程序打包

项目包 链接:https://pan.quark.cn/s/6a3455161757 记得创建yolo的数据库,并把数据导入 目录 一、把项目变为release版 二、运行项目 三、找到windeployqt6.exe 四、运行exe 五、无法定位重新输入点 学习视频 QT程序打包发布教程!&#xff01…

[Lc优选算法] 双指针 | 移动零 | 复写零 | 快乐数

目录 🎢1.移动零 题解 代码 ⭕2.复写零 题解 代码 ⭕3.快乐数 题解 代码 🎢1.移动零 题目链接:283. 移动零 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零…

Python 爬虫实战案例 - 获取社交平台事件热度并进行影响分析

目录 一、引言 二、数据爬取 三、数据分析 四、可视化展示 五、总结 一、引言 在当今信息爆炸的时代,社交平台成为了各类事件发酵和传播的重要场所。了解社交平台上事件的热度以及其潜在影响,对于舆情监测、市场营销、社会趋势分析等领域具有重要意…

前端性能测试面试题及参考答案

目录 前端性能测试中,首屏时间(FCP)和白屏时间的定义及测量方法是什么? 解释浏览器渲染过程中关键路径(Critical Rendering Path)的组成部分。 如何通过 Navigation Timing API 统计页面加载各阶段耗时? 什么是 LCP(Largest Contentful Paint)?如何优化? 前端性…

C#通过接口 继承接口的类 实现约束 对List内数据类型的值进行排序,可直接复制使用

工具类 通过接口 继承接口的类 实现约束 对List内数据类型的值进行排序,可直接复制使用 //工具类 Tools//说明接口的//1.先有接口 2.继承接口的类 3.实现约束public interface IComParable<T> //接口{int ComPareTo(T other); //在list的数组…

JMeter 的基础知识-安装部分

以下将从环境配置开始,为你详细介绍 JMeter 的基础知识,涵盖环境搭建、界面认知、测试计划创建、常用组件使用等方面内容。 1. 环境配置 1.1 安装 Java JMeter 是基于 Java 开发的,所以需要先安装 Java 开发工具包(JDK)。 下载 JDK:访问 Oracle 官方网站(https://www…

Ubuntu 创建新用户及设置权限

1、新建用户 sudo adduser username 其中username是你要创建的用户的用户名&#xff0c;然后设置密码和相关信息就可以了 2、给新用户sudo权限 新创建的用户没有root权限&#xff0c;我们执行以下命令给用户sudo权限 sudo usermod -a -G adm username sudo usermod -a -G s…

FastExcel 实现数据分批次导入、导出

是基于 FastExcel 实现数据分批次导入和保存的完整解决方案&#xff0c;结合了高性能流式读取与分批处理机制&#xff1a; 一、环境准备 依赖配置 <dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version&…