- 博客(89)
- 收藏
- 关注
原创 [C++面试] 基础题 11~20
构造函数用于对象的创建,不同场景可能需要不同的初始化参数。语法上:构造函数与类名相同且,但允许参数列表不同。C++标准规定析构函数析构函数在对象销毁时由编译器,且。若允许重载,编译器无法确定应调用哪个版本。析构函数的核心职责是(如内存、文件句柄等),通常需要统一的清理逻辑。若需差异化处理,应通过成员变量状态控制,而非重载。
2025-05-24 18:32:28
766
原创 [C++面试] 基础题 1~10
若派生类定义了与基类同名但参数不同的函数(无论基类是否为虚函数),基类函数会被隐藏,而非覆盖。关键字,强制检查派生类函数是否真正覆盖基类虚函数,避免因参数不匹配导致的隐藏错误。内(如同一个类中),允许存在多个同名函数,但。(派生类与基类之间),派生类重新定义基类的。这会导致编译错误,提示重复定义了同一个函数。参数类型、个数、顺序(容易忽略)(参数类型、个数或顺序不同)
2025-05-22 23:00:34
527
原创 [C++面试] lambda面试点
Lambda 是 C++11 引入的匿名函数对象,用于创建轻量级的可调用对象。[捕获列表] (参数列表) mutable(可选) 异常声明(可选) -> 返回类型(可选) { 函数体 }部分是否必须说明捕获列表[]必须不可省略,定义变量捕获方式函数体{}必须不可为空(但可为空语句[]{}参数列表()可选若无参数可省略mutable可选仅在需修改按值捕获的变量时使用返回类型->可选多语句或复杂逻辑时需显式指定异常声明可选极少使用,如。
2025-05-15 23:37:40
1038
原创 jthread是否可以完全取代thread?
头文件里的一个命名空间,它提供了一系列用于操作当前线程的实用函数。当需要将线程句柄传递给其他对象管理时(如线程池),的自动析构行为可能引入意外开销。向线程发送停止请求,线程内部可检查。此函数可让当前线程休眠指定的时长。避免手动设计线程退出标志(如。的移动语义更直接,而。返回当前线程的唯一标识符。
2025-04-29 23:43:22
361
原创 [C++面试] explicit关键字面试点总结
explicitGoogle C++规范建议所有单参数构造函数必须加explicit,除非明确需要隐式转换(如从构造)。
2025-04-05 23:17:17
731
原创 C++书籍推荐1:C++进阶心法
书籍以C语言基础为起点(如指针、数组、volatile关键字等),逐步深入C++核心机制,包括内存管理、面向对象编程、异常处理、C++11/14新标准(如右值引用、移动语义)等。个人觉得,有一定的深度,但存在极少部分内容的准确性待商榷。可以看看作者列出的点,加深、巩固。《C++进阶心法》由吕吕、王琥合著,北京航空航天大学出版社于2019年出版。
2025-04-05 17:56:05
101
原创 [C++面试] 如何在特定内存位置上分配内存、构造对象
new面试-高阶题(可以主动讲给面试官),适用于内存池、高性能场景或需要精确控制内存布局的编程需求。
2025-04-05 16:15:52
603
原创 [C++面试] 智能指针面试点(重点)续4
允许转换的方向unique_ptr→shared_ptr(通过移动语义)。禁止转换的方向shared_ptr→unique_ptr之间仅允许右值移动赋值;unique_ptr可通过右值(如std::move或临时对象)赋值给shared_ptr,但左值不行。
2025-04-01 23:13:04
373
原创 [C++面试] 智能指针面试点(重点)续3
reset()在中,其核心作用是 释放当前管理的资源(若存在),并可以选择绑定新的资源。step1:若unique_ptr当前持有资源(即非空指针),调用reset()会立即通过delete或自定义删除器释放该资源step2:若reset()接受参数(如),则释放旧资源后,unique_ptr会接管新资源的所有权// 释放原资源(int(4)),绑定新资源(int(20))// 初始绑定资源(值为4的int对象)// 释放资源并置空,不再绑定任何资源执行后状态,表示无资源绑定。原资源。
2025-03-30 23:46:02
978
原创 [C++面试] 智能指针面试点(重点)续2
[C++面试] RAII资源获取即初始化(重点)-优快云博客[C++面试] 智能指针面试点(重点)-优快云博客[C++面试] 智能指针面试点(重点)续1-优快云博客智能指针(如和)不支持直接的加减操作。这是因为智能指针的设计目标是安全地管理资源所有权,而非像原始指针那样进行内存地址的算术运算。五法则(Rule of Five)是指:当一个类需要自定义析构函数、拷贝构造函数或拷贝赋值运算符时,通常也需要自定义移动构造函数和移动赋值运算符 是一种独占式智能指针,同一时间只能有一个 指向某个对象。为了保证
2025-03-30 11:52:15
1020
原创 [C++面试] 智能指针面试点(重点)续1
默认删除器:使用delete释放对象,无法处理非堆内存(如文件句柄)。自定义删除器:可释放任意资源(如文件、网络连接),且不影响引用计数的线程安全。// 自定义删除器释放文件句柄});
2025-03-29 11:44:16
1257
原创 [C++面试] 智能指针面试点(重点)
C++面试] RAII资源获取即初始化(重点)-优快云博客智能指针是一种类模板,用于管理动态分配的内存,能在对象生命周期结束时自动释放内存,避免内存泄漏。在传统的 C++ 中,使用new分配内存后,必须手动使用delete释放,若忘记或在异常情况下未执行delete,就会导致内存泄漏。而智能指针利用 C++ 的 RAII(资源获取即初始化)技术,在对象构造时获取资源,在析构时释放资源,大大提高了代码的安全性。// 当 ptr 离开作用域时,内存会自动释放return 0;
2025-03-27 23:45:09
1091
原创 [C++面试] RAII资源获取即初始化(重点)
RAII(Resource Acquisition Is Initialization,资源获取即初始化)是 C++ 的核心编程范式,核心思想是 。
2025-03-26 23:18:27
1144
原创 [C++面试] span<char>和string_view的差别
2、string_view 仅限字符类型,隐式假设数据为字符串(如自动处理空终止符) 提供字符串专用方法,如 (截取子串)、(查找字符 / 子串)、(判断是否以某子串开头)等,完全围绕字符串语义设计,适合字符串处理 存储指针和字符数,可能包含空终止符标记 可能因隐式空终止符导致边界检查开销 因隐式绑定字符类型,可能因误用非字符串数据(如二进制数据)导致未定义行为3、span 无类型限制,需显式指定数据类型,支持泛型编程(如处理二进制缓冲区) 提供通用序列操
2025-03-26 21:35:00
518
原创 [C++面试] 你了解视图吗?
它提供了对序列(如数组、容器等)的非拥有性、只读或可写的访问。(就像是个透明的放大镜,它能让你去看一组数据,但它自己不拥有这些数据。避免数据的复制,提高性能。提供统一的接口来处理不同类型的序列。实现延迟计算,只有在需要时才进行实际的数据处理。// 创建一个视图,它是对numbers向量的一个抽象表示return 0;在这个例子中,创建了一个视图,它包含了numbers向量中的所有元素。通过视图可以遍历这些元素,而不需要复制数据。继承类,以确保视图符合视图的接口要求。
2025-03-25 23:20:43
901
原创 [C++面试] 迭代器面试点(难点)
需要定义迭代器类,并实现一些必要的操作符重载,如++==!等。// 自定义容器类private:T* data;int size;public:// 自定义迭代器类private:T* ptr;return ptr!it!
2025-03-20 23:34:31
772
原创 [C++面试] 关于deque
底层由多个固定大小的缓冲区组成,通过“中控器”(通常是一个指针数组)管理这些缓冲区的地址。的随机访问需通过中控器定位到具体缓冲区,再计算元素在缓冲区内的偏移,多了一层间接寻址;由多个固定大小的缓冲区组成,通过中控器(指针数组)管理。在中间插入/删除元素:可能导致后续元素的迭代器失效(需移动元素)。,支持在头部和尾部高效插入/删除元素,同时允许随机访问。直接通过连续内存的基地址+偏移量访问,无需额外查找步骤。在插入/删除元素时,所有后续迭代器均失效;仅在涉及缓冲区重新分配时影响部分迭代器。
2025-03-16 23:42:52
968
原创 [C++面试] 对通透比较器了解多少?(较少涉及,可跳过)
在 C++ 中,比较器是一个可调用对象(函数、函数对象或 Lambda 表达式),用于定义元素之间的比较规则。用途:通常作为参数传递给标准库中的排序函数或关联容器,以指定元素的顺序。// 使用 Lambda 表达式作为比较器进行降序排序});Lambda 表达式作为比较器传递给std::sort函数,用于定义降序排序规则。// 定义自定义比较器函数对象public:public:int age;// 使用自定义比较器进行排序return 0;
2025-03-11 23:22:39
386
原创 [C++面试] 迭代器与指针有什么区别?
迭代器:一种抽象概念,是为了统一对不同容器的访问方式而设计的,它是容器提供的一种接口。迭代器适用于所有标准库容器,如。元素是以位的形式存储的,不能直接对单个位进行常规的指针操作,因此普通的指针无法直接作为。指针:一种内置的数据类型,直接指向内存地址;指针主要用于操作数组或动态分配的内存块;元素分配一个字节(8 位)的内存空间,而是采用位压缩的方式。为了节省内存,不会像普通的。操作符来访问对象的成员。
2025-03-08 16:02:04
455
原创 char data[len_row][len_col]能直接讲data传递给char **吗?
数组名会 “退化” 为指向其首元素的指针。也就是 char (*)[len_col]。而不是char **如果传入的是 char *arr[10];类型传递给相应函数,因为它可以理解为是指向。
2024-12-28 10:36:16
172
原创 C++杂记
可以在类中重载该运算符,就可以像使用函数一样使用对象。只要重载了(),这个类就叫函数对象(可调用对象)1、() —— 函数调用运算符。
2024-12-28 09:57:11
235
原创 lambda初探2:与函数对象的区别
1、lambda表达式不需要显式定义一个类。它在编译期由编译器自动生成一个闭包类,在运行时由这个闭包类产生一个对象。
2024-12-21 18:37:20
126
原创 lambda初探(一)
退出lambda表达式后,foo外层的值不变化。foo内部的x,值是持续的,像static。即使退出foo函数后,值的状态依然保持。foo运行了两次,内部x的值,也变化了两次。外层x的值变化,并不影响foo内部。发生捕获时,拿到x,y的值。
2024-12-21 09:53:06
320
原创 RAII 资源获取即初始化
3、典型应用:智能指针、容器等(unique_lock、lock_guard)1、在构造函数中初始化资源。2、在析构函数中释放资源。
2024-08-15 22:45:36
162
原创 atomic
能用原子解决的,用互斥量也可以解决(m_mutex.lock();原子操作的效率要更高一点。一般:++、--、+=、-=、&=、|=、^=等简单运算符的运算是原子的,其他的一些复杂表达式的运算就不一定是原子的了。
2024-08-15 21:56:25
125
原创 如何从线程返回结果?
std::async具有不确定性。系统如果决定延迟运行(std::launch::deferred),则std::async创建的任务不会立即执行。可以看出,std::async与std::thread的主要区别在于:当系统资源紧张时,调用std::thread有可能导致线程创建失败,程序崩溃。如果不需要拿到返回值。std::packaged_task类模板,把各种可调用对象包装起来,方便给线程入口函数调用。std::async —— 函数模板,启动一个异步任务,返回一个std::future对象。
2024-08-14 23:31:08
430
原创 Cpp模板-template、typename(二)
T —— 类型参数,也叫模板参数 中包括两种类型参数:用typename/class修饰的是类型模板参数,是类型说明符。另外的称为非类型模板参数。与函数模板一样,非类型参数不允许使用浮点型、类对象(对象的引用可以)、void。
2024-06-02 18:34:41
551
原创 Cpp模板-template、typename(一)
2、template 为了与定义类的class区分,用typename来定义类型参数。T可以随便用其他占位符。模板参数名的作用域仅限于函数模板范围内,且每个模板参数要在函数的形参列表中至少出现一次。——《C++面向对象程序设计(杜茂康)》C7。1、模板是类型安全的。
2024-05-30 23:54:23
347
原创 5-29 宏的要点
4、尽可能使用const变量,而不是宏常量。2、简单宏性能优于常规函数调用。3、宏不支持任何形式的类型安全。1、宏函数可以减少代码行。
2024-05-29 23:48:34
158
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人