当前位置: 首页 > news >正文

C++ 常见面试知识点

主要介绍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.dtcms.com/a/42058.html

相关文章:

  • 为什么java从json中获取值有数据类型,而从xml中获取值没有数据类型?
  • 一个典型的要求: Python | C#实现年月日创建文件夹 时分秒对应文件名的保存路径
  • 基于springboot学生管理系统
  • SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析
  • 被AWS反撸了,试一下能否申请退还
  • 【Java并发编程】 AQS的实现类ReentrantLock的底层工作流程详细讲解
  • 【LeetCode: SQL专题 : SQL132 每个题目和每份试卷被作答的人数和次数 + 合并查询】
  • git 使用常见错误整理
  • 【我的 PWN 学习手札】House of Husk
  • 服务异步通讯与RabbitMQ
  • 29.[前端开发-JavaScript基础]Day06-创建对象-对象补充-包装类型-数组Array
  • Redis 数据结构和使用详解(带示例)
  • 登录次数限制
  • Matlab地图绘制教程第2期—水陆填充图
  • vue 中 - 外部组件样式修改
  • 间隙波导阵列天线 学习笔记 1 基于新型3D打印馈网拓扑的宽带双极化间隙波导天线阵列
  • 如何使用Docker一键本地化部署LibrePhotos搭建私有云相册
  • STM32G473VET6 在 Keil MDK 下手动移植 FreeRTOS 指南
  • ubuntu22.04安装docker engine
  • 图数据库 | 24、如何进行正确性验证?
  • 使用优化版的编辑距离算法替代ES默认的评分算法
  • 当进行npm install指令,安装依赖的情况下,存在如下报错
  • 神经网络中感受野的概念和作用
  • Trae根据原型设计稿生成微信小程序密码输入框的踩坑记录
  • SpringBoot+EasyPOI百万级数据导出Excel实战|分页防OOM+(含源码示例)
  • Java集合List快速实现重复判断的10种方法深度解析
  • 清华大学|DeepSeek学习资料,从入门到精通。
  • DeepSeek 202502 开源周合集
  • 快速安装CUDA版本PyTorch(pip/阿里云/CUDA 12.1)
  • MySQL 的存储引擎有哪些?它们之间有什么区别?