- 博客(33)
- 收藏
- 关注
原创 【C++并发编程01】初识C++并发编程
且让太多的线程同时运行,会消耗很多操作系统资源,因为每个线程都需要独立的堆栈空间,最后让操作系统运行得更加缓慢。每次任务切换都需要切换一次上下文,为当前运行的任务保存cpu的状态和指令指针,并计算出要切换到哪个任务,并未即将切换到的任务重新加载处理器装填。我们在电脑上能够边听音乐边和其他人在网上聊天就是使用了计算机的并发功能,这也叫计算机的分时系统,使用的是时间切片的技术。在单个进程中运行多个线程,进程中的所有线程都共享地址空间,当一个数据被多个线程同时访问时,需要确保数据的一致性。
2025-05-30 15:54:19
435
原创 [Effective C++]条款30:透彻了解inlining的里里外外
【代码】[Effective C++]条款30:透彻了解inlining的里里外外。
2025-04-11 17:25:25
234
原创 [Effective C++]条款29:为“异常安全”而努力是值得的
异常安全是C++编程中非常重要的概念,它确保程序在抛出异常时仍能保持数据和状态的一致性。场景:需要执行多个操作,要么全部成功,要么全部不执行。解决方案:使用copy-and-swap惯用法。3.1、使用std::exchange。
2025-04-09 19:12:29
457
原创 [Effective C++]条款28:避免返回handles指向对象内部成分
在C++中,返回指向对象内部成分的引用(handles)可能会导致封装性降低和对象空悬问题。为了避免這些问题,可以通过返回const引用来限制对内部数据的修改,从而确保只读访问。
2025-04-08 20:13:26
302
原创 [Effective C++]条款27:尽量少做转型动作
C++中,转型(cast)技术是将一种数据类型转换为另一种数据类型的过程。C++主要提供了两种主要的转型方式:旧式的C转型方式和四种新式的C++转型方式。
2025-04-07 19:39:52
895
原创 [Effective C++]条款26:尽可能延后变量定义的出现时间
在C++中,尽可能延后变量定义的出现时间,主要原因是为了提供代码的可读性,减少不必要的开销以及避免潜在的错误。
2025-04-01 19:23:18
340
原创 [Effective C++]条款25:考虑写出一个不抛异常的swap函数
【代码】[Effective C++]条款25:考虑写出一个不抛异常的swap函数。
2025-03-28 18:45:45
433
原创 [Effective C++]条款24:若所有参数皆需类型转换,请为此采用non-menber函数
【代码】[Effective C++]条款24:若所有参数皆需类型转换,请为此采用non-menber函数。
2025-03-27 20:10:24
317
原创 [Effective C++]条款23:宁以non-member、non-friend替换member函数
这个原则的核心思想是,如果一个函数不需要直接访问类的私有或受保护成员,那么它应该被设计为非成员函数(non-member function),而不是成员函数(member function)在C++中,宁以非成员函数、非友元函数替换成员函数,的设计原则是为了增强封装性、减少类之间的耦合,并提高代码的灵活性和可维护性。有一个坐标点类Point,现在需要实现一个函数来计算两个点的距离。
2025-03-26 19:29:18
249
原创 [Effective C++]条款22:将成员变量声明为private
在C++中,将成员变量声明为private而不是public,主要是为了遵循面向对象编程(OOP)的封装原则。他有助于隐藏对象的内部实现细节,提供更好地控制,安全性和可维护性。
2025-03-24 20:15:00
316
原创 [Effective C++]条款21:必须返回对象时,别妄想返回其reference
【代码】[Effective C++]条款21:必须返回对象时,别妄想返回其reference。
2025-03-23 18:00:00
244
原创 [Effective C++]条款20:宁以 pass-by-reference-to-const替换 pass-by-value
在C++中,函数参数与返回值的数据传递的方式,对程序的性能和正确性有着重要影响。C++默认使用pass-by-value(传值)的方式传递参数。但这种方式在某些情况下会导致性能问题和对象切割问题。C++推荐使用pass-by-reference-to-const(传常量引用)的方式来传递参数。
2025-03-22 18:30:00
379
原创 [Effective C++]条款19:设计class犹如设计type
在C++中,设计一个类(class)就像设计一个新的类型(type),需要仔细考虑很多设计规范,以下是在设计类时需要考虑的问题以及对应解决方案。
2025-03-21 18:30:00
440
原创 [Effective C++]条款18:让接口容易被正确使用,不易被误用
C++中的接口实现有 function接口、class接口和template接口等,每一种接口都是用户与代码互动的方式。
2025-03-20 18:30:00
210
原创 [Effective C++]条款17:以独立语句将newed对象置入智能指针
C++标准中没有规定函数参数的求值顺序,也就是说,编译器可能会以任意顺序对参数进行求值.
2025-03-19 18:00:00
349
原创 [Effective C++]条款16:成对使用new和delete时要采取相同形式
C++中,new和delete时用于动态内存管理的操作符.他们的底层实现和编译器处理涉及到内存分配、对象构造和析构等.
2025-03-18 18:30:00
295
原创 [Effective C++]条款15:在资源管理类中提供对原始资源的访问
在C++中,使用RAII方式管理动态内存资源时,通常会将资源封装在一个类中。
2025-03-16 19:00:00
504
原创 [Effective C++]条款14:在资源管理类中小心coping行为
在C++中,RAII(Resources Acquisition Is Initialization - 资源获取即初始化)是一种重要的资源管理技术,它通过对象的生命周期来管理资源的获取和释放。当一个对象持有一个资源(如互斥锁)时,通常不希望该资源对象被拷贝或赋值,因为这可能导致资源的重复释放或竞争条件。
2025-03-15 19:00:00
207
原创 [Effective C++]条款12:复制对象时勿忘每一个成分
在C++中,拷贝构造函数和拷贝赋值操作符是用于管理对象拷贝行为的两个重要成员函数,如果不进行自定义实现,编译器默认会默认实现这两个函数。
2025-03-13 16:22:17
872
原创 C++ 浅拷贝&深拷贝
在C++中,深拷贝和浅拷贝都是对象的拷贝方式,两者的主要区别是如何处理动态分类的资源.对于程序中的资源管理错误如内存泄漏、双重释放非常重要.
2025-03-12 21:52:51
366
原创 [Effective C++]条款11:在operator= 中处理“自我赋值”
【代码】[Effective C++]条款11:在operator= 中处理“自我赋值”
2025-03-09 19:00:00
230
原创 [Effective C++]条款10:令operator= 返回一个reference to *this
* 4、this 与 *this **
2025-03-08 22:07:47
274
原创 [Effective C++]条款09:绝不在构造和析构过程中调用virtual函数
【代码】[Effective C++]条款09:绝不在构造和析构过程中调用virtual函数。
2025-03-07 19:40:18
284
原创 [Effective C++]条款08:别让异常逃离析构函数
当异常抛出时,C++会进行栈展开,调用局部对象的析构函数。如果析构函数本身抛出异常,程序将面临两个异常同时存在的情况,这会触发std::terminate,导致程序终止。栈展开的目的是销毁当前作用域内的局部对象,并调用它们的析构函数,以确保资源被正确释放。因此,程序会调用 std::terminate,直接终止程序。如果析构函数抛出异常,可能导致资源未正确释放,因为异常会中断析构函数的正常执行流程。析构函数应确保资源释放,抛出异常会破坏这一原则,增加程序的不确定性。
2025-03-06 21:53:35
319
原创 [Effective C++]条款07:为多态基类声明virtual析构函数
当基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么通过基类指针删除对象时,只会调用基类的析构函数,而不会调用派生类的析构函数。将上面的基类析构函数设置为虚函数后,通过基类指针删除派生类对象时,会先调用派生类的析构函数,再调用基类的析构函数,确保所有资源正确释放。通过基类指针删除派生类对象时,编译器会根据对象的动态类型(即实际指向的派生类类型)调用正确的析构函数。如果基类的析构函数不是虚函数,编译器会直接调用基类的析构函数,而不会通过虚函数表查找派生类的析构函数。③、调用基类的析构函数。
2025-03-04 19:00:00
457
原创 [Effective C++]条款06:若不想使用编译器自动生成的函数,就该明确拒绝
C++11 之前,可以通过将函数声明为private,并不提供实现,用来阻止外部调用。private修饰的函数,外部不能调用。定义一个不可拷贝的基类,并让目标类继承它。因为基类显式说明没有拷贝函数和拷贝赋值操作符的函数调用功能,其派生子类也具有该特性。C++ 11引入了= delete,可以显式删除函数,明确告诉编译器不要生成delete修饰的函数了。
2025-03-03 19:49:12
132
原创 [Effective C++]条款03:尽可能使用const
3.3)、常量指针常量(Constant Pointer to Constant):指针本身和指针指向的值都不可修改。3.1)、常量指针(Pointer to Constant):指针指向的值不可修改,但指针本身可以指向其他地址。const关键字常用于定义常量,表示某个值、对象或指针在程序运行期间不可修改,也用于修饰函数,引用等.3.2)、指针常量(Constant Pointer):指针本身不可修改,但可以通过指针修改指向的值。const可以修饰函数的返回值,表示返回值是常量,不可修改。
2025-02-28 22:51:33
347
原创 [Effective C++]条款02:尽量以const, enum, inline替换#define
尽量以const, enum, inline替换#define
2025-02-27 20:09:01
338
原创 [Effective C++]条款01:视C++为一个语言联邦
这个概念是由 C++ 之父 Bjarne Stroustrup 提出的,用来描述 C++ 的多范式特性和其设计哲学。C++ 并不是一个单一的语言,而是由多个子语言或范式组成的“联邦”。每种子语言都有自己的规则和特性,但它们共同构成了 C++ 的整体。
2025-02-27 19:57:17
1248
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人