自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 李建忠C++设计模式学习笔记

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式和工厂方法模式的区别在于,抽象工厂相比于工厂模式多了一个维度的变化,就相当于是装饰模式到桥接模式的变化。比方说是产品系列与产品维度两个方向,他们之间是相互依赖的关系。抽象模式虽然一个产品中包含多个类,但是在创建的时候不需要具体类,因为他们已经被封装好了。抽象工厂通过新增工厂类支持新平台(如新增LinuxFactory)工厂方法通过新增子类支持新产品(如新增LinuxButton)

2025-05-26 13:31:18 763

原创 候捷C++内存管理学习笔记

这里使用new char分配一块未初始化的原始内存空间,因为char是C++中最小的地址单位,占用的大小是1字节,相较于直接new Screen[screenChunk]避免了构造函数的调用,因为我们要管理的是原始的内存空间,而且使用char得到的内存会自动对齐,满足Screen的对齐要求。对i取地址然后转换为char*类型的指针,步长为1字节(int*型指针步长为4字节),这时候就可以通过*(char*)&i解引用获取i中存储的第一个字节的值,如果是大端,存储的值应该是0,如果是小端,存储的值应该是1。

2025-05-21 21:12:44 646

原创 C++智能指针

智能指针是管理动态内存的自动化工具,使用了RAII(Resource Acquisition Is Initialization)资源获取即初始化技术实现内存的自动释放。RAII技术就是在对象析构时完成内存空间的分配,在析构时自动释放内存,即使发生异常,析构函数也会被正确调用。

2025-05-18 23:34:10 766

原创 侯捷C++STL学习笔记(一,三,四讲)

使用malloc分配出来的内存的额外开销中最重要的部分就是cookie,cookie记录了该内存空间的大小,所以我们在free的时候只需要传入指针而不需要指定释放内存空间的大小。容器默认使用的分配器(allocate(),deallocate())只是简单的调用new和delete,没有额外的设计,因为new本质上是调用malloc,而malloc在分配一块内存空间时,除了指定的空间大小外还附加了额外的开销,若存储的元素本身所占内存很小,那么额外的开销甚至会比存储的元素更大,所以默认的迭代器性能不高。

2025-05-18 19:10:59 1049

原创 C++标准库中的链表(list双向链表)

C++标准库中的链表使用了allocator和iterator实现。因为默认的allocator就是调用new和delete,所以我这里直接使用了new和delete。且仅实现了一些常用的操作,这里只是仿照标准库实现,和标准库有差别。在C++中list是一个双向的、环状的链表,清楚了这个概念我们就不难理解标准库中的操作。

2025-05-16 23:47:01 1014

原创 候捷C++2.0学习笔记

这是 C++ 的语言特性,目的是简化代码书写。在进行大量数据的赋值的时候,在某些情况下我们不希望产生copy(即再开辟出一块内存空间进行深拷贝),这时候就出现了右值引用,返回的是右值的地址,在C++11之前对一个右值取地址是不合法的,如&func(),这里对函数的返回值(一般情况下是右值)进行了取地址。这里在创建A的实例的时候,会调用A的默认构造函数,而A的默认构造函数会隐式调用P的默认构造函数(前提是P的构造函数不是explicit),如果P的默认构造函数不存在,那么A的默认构造函数编译就会不通过。

2025-05-12 12:19:36 984

原创 候捷C++学习笔记(下)

函数的调用过程分为静态绑定和动态绑定,在c中调用函数时,使用的是静态绑定,在调用函数前需要先把函数编译成一个特定的语法,在调用函数时使用call+函数地址(调用的是固定的地址),然后跳转到对应函数的位置,函数执行完毕后在return回来。当一个类中含有虚函数时,就会自动包含一个虚指针和虚表(多个虚函数对应一个虚指针和一个虚表),虚指针指向虚表,虚表中存储的是类中虚函数的地址,当需要调用到虚函数的时候,就通过虚指针获取到虚表,再从虚表中的相应位置(由声明函数时的顺序决定)获取到对应虚函数的地址。

2025-05-07 15:53:23 951

原创 候捷C++学习笔记(上)

浅拷贝:对于指针对象来说浅拷贝是非常危险的,如果简单的把a赋值给b(b = a),那么b指针原来所指向内存位置的内容就丢失了,b指针指向了a指针所指向的位置,造成了内存泄漏,而且还形成了两个指针指向同一个位置的局面(相当于b是a的别名,应该尽量避免别名的出现)。作用域是定义它的类,只能通过类名::来访问。一般情况下都可以使用引用传递,除非返回的对象的作用域是local的,即在函数中创建的临时对象,该对象在函数调用结束后就会被销毁,这时外部接收到的引用是损坏的,所以在这种情况下不可以使用引用传递。

2025-05-02 22:14:15 1017 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除