对QT控件使用差很多,不全面。
不太会看文档,自己对于新方法无法适应。
内存泄漏的现象,如何检查代码中的内存泄露?
已分配的内存空间在使用完毕后未被释放,导致可用内存减少并最终可能导致系统性能下降或程序崩溃。
方法一:代码审查和静态分析工具(自己查)
方法二:动态分析工具(Valgrind)
方法三:内存泄漏检测库(gcc -fsanitize=address -g your_program.c -o your_program)(在代码中包含#include <mcheck.h>并在main函数开始处调用mtrace())
方法四:手动跟踪:日志记录、智能指针(自动管理内存分配和释放)
-
动态多态(运行时多态)/ 静态多态(编译时多态)
静态:函数重载、模板(编译的时候就绑定)
动态:虚函数实现(运行的时候绑定) -
虚函数 虚表指针 虚表
虚函数:基类中声明的函数,使用virtual关键字。它允许派生类重写该函数,从而在运行时决定调用哪一个版本的函数。通过虚函数可以实现多态性。
虚表指针:为了实现运行时的多态性,编译器会在每个包含虚函数的类中插入一个隐藏的成员指针,称为虚表指针(vptr)。这个指针指向该类的虚表(vtable)。
虚表:是一个函数指针表,它存储每个虚函数的地址。每个包含虚函数的类都有一个虚表。顺序与它们在类中的声明顺序一致。
工作原理:
当一个包含虚函数的对象创建时,vptr被初始化为指向该对象所属类的虚表。
在调用虚函数时,通过vptr查找虚表中相应的函数指针,并调用实际的函数实现。
- 每个对象实例包含一个指向该虚函数表的指针
- 抽象类是包含至少一个纯虚函数的类
-
抽象类
定义方法/接口,提供默认行为,促进代码复用。
不能实例化!! -
回调函数
回调函数是指通过将函数指针作为参数传递给另一个函数,从而在特定事件或任务完成时调用该函数。
在C++中,回调函数可以通过函数指针、函数对象(仿函数)、以及lambda表达式来实现。
lambda表达式是一种简洁的方式来定义匿名函数。
什么叫协议:指定一个能够交流的标准。
协议(Protocol)在计算机科学和电信领域中,是指一组规则或标准,这些规则或标准定义了计算机之间如何进行通信或数据交换。协议规定了数据格式、传输方式、错误检测和纠正方法等内容,以确保在不同设备或系统之间进行可靠和高效的通信。
什么叫tcp:
TCP,全称是传输控制协议(Transmission Control Protocol),是Internet协议族的一部分,用于管理数据在网络中的传输。它是一种面向连接的协议,提供可靠、顺序的字节流传输。TCP在网络通信中扮演着重要的角色,确保数据能够从一个网络设备传输到另一个网络设备,且数据不会丢失、重复或失序。
守护进程详细内容,怎么调试
std::move
C++11 委托构造函数,继承构造函数
默认构造函数
初始化构造函数(有参数)
拷贝构造函数
移动构造函数(move和右值引用) :接受一个右值引用参数,通过“移动”资源来初始化新对象,而不是复制。
委托构造函数 :一个构造函数调用另一个构造函数来简化代码和减少重复。
转换构造函数 :可以接受单个参数并实现从该参数类型向类类型转换的构造函数。
class MyClass {
public:
int x;
MyClass(int val) : x(val) {
// 转换构造函数
std::cout << "Conversion constructor called with value: " << x << std::endl;
}
};
int main() {
MyClass obj = 10; // 调用转换构造函数
return 0;
}
可变参数模板(variadic templates)是C++11引入的一种强大特性,允许定义能够接受可变数量参数的模板。