- 博客(8)
- 收藏
- 关注
原创 Qt 关于信号与槽函数实现机制浅谈
初学者在进行信号与槽函数编程时,会发现需要实现信号/槽的类都需要声明宏定义Q_OBJECT,这是因为在编译阶段,MOC会通过该宏定义把生成额外的元数据信息,用于绑定信号和槽函数。其中qt_metacall和qt_static_metacall函数通过为槽函数绑定了其在调用过程中的相关参数(发送对象、id等),从而实现了对指定槽函数的调用。由于信号和槽函数的生效对象间是解耦的,并且多线程间的发送和接收通过事件循环和事件队列实现,因此它可以适用于复杂场景,同时也是线程安全的。
2024-06-05 14:32:11
640
原创 关于yoloV8数据集路径设置
因为settrings.yaml一般不会去修改,所以建议在coco8.yaml的path设置为数据集根目录的绝对路径。win11,anaconda创建虚拟python环境,python3.10,pip安装ultralytics。
2024-05-21 15:57:22
2084
原创 《深度探索C++对象模型》笔记——关于对象构造和虚函数指针初始化
对于存在多重继承的继承链来说,如果基类及其派生类都存在虚函数,对最后一个派生类创建对象时,由于构造函数的调用顺序是从基类依次到派生类,因此虚函数指针也是从基类开始初始化直至派生类,这种结构有点像递归。这也能够保证在构造函数的成员初始化列表或用户代码中调用虚函数时,虚函数指针都已经完成了初始化。虚函数指针一般会在构造函数中初始化,它的初始化位置一般在成员初始化列表和用户代码之前。执行以下代码时,编译器将会合成base2的隐式拷贝构造函数。执行以下代码时,编译器将会合成base2的隐式拷贝赋值运算符。
2024-04-10 15:19:51
352
原创 虚析构函数
由于析构函数是虚函数,所以析构child对象时,先通过虚函数指针Vptr找到虚函数表,再从虚函数表中执行析构函数,而上述过程中,编译器会适当地调整this指针的偏移值,使其找到正确的析构函数,能够正确地销毁child对象。编译器会把child对象地址做偏移,以此初始化指针pbase1和pbase2;当delete时,也会对指针存储的地址做出偏移,以此析构child对象。如果析构函数不是虚函数,而是普通非静态成员函数,那么编译器就无法找到正确的析构函数用来销毁对象,因此会产生内存泄漏。
2024-04-08 17:58:22
289
原创 浅拷贝和深拷贝
浅拷贝:没有提供显式的拷贝构造函数,类内部的成员对象也没有拷贝构造函数时,一般执行的是浅拷贝;深拷贝:存在显示的拷贝构造函数或者类内部的成员对象存在显式拷贝构造函数,一般执行的是深拷贝。
2024-04-03 16:46:49
208
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅