- 博客(47)
- 收藏
- 关注
原创 Muduo库代码剖析 : ThreadPool
本章我们将把EventLoop和C++11的thread结合, 实现Thread / EventLoopThread / EventLoopThreadPool.
2025-04-16 11:05:06
997
原创 Muduo库代码剖析 : EventLoop
EventLoop类似于Reactor模型中的**反应堆**(Reactor)和**事件分发器**(Demultiplex)的合并, 其目的在于高效的接收事件, 并正确分配给对应的事件处理器.
2025-04-15 17:01:26
644
原创 [Linux高性能服务器编程] 多线程编程
一个进程在创建之初其实就可以看作是一个主线程, 其创建出的线程其实和其本质无很大差别, 其实就多了一个线程共享资源罢了, 我们要明晰的是一个进程创建的不同线程之间, 什么是共享的, 什么是独立的.
2025-02-23 15:05:56
1036
原创 [Effective C++]条款53-55 杂项讨论
学到这里, Effective C++至此也算是告一段落了, 还剩下一些杂七杂八的讨论, 我们将在本文逐一列举.
2025-01-31 15:51:41
343
原创 [Effective C++]条款49-52 内存分配
条款49-52中详细讲述了定制new和delete的实现, 加上前面所讲述的智能指针及资源管理类, 让我们对内存管理有了比较深刻的认知. 但是这部分有些内容经查证已经相对过时, 所以我将统合这四个条款, 先对内存分配有一个初步的认识, 然后再简单讲解一下定制new和delete的编写, 之后再讨论一下各种内存分配的方式.
2025-01-30 18:19:00
1100
原创 [Effective C++]条款48 模板元编程(TMP)
在条款47我们主要了解了萃取器这种模板元编程, 也初步进入了模板元编程的世界. 在本条款中, 我们将继续认识模板元编程, 认识其必要性和应用场景, 相比于条款47讲的还算比较深入,本条款真的就只是简介, 因为其体量确实非常庞大, 甚至可以单独作为一个学科研究.
2025-01-22 21:06:14
2193
原创 [Effective C++]条款47 萃取器
traits classes(萃取器类), 如你所见萃取器其实是一个模板类, 在C++中萃取器是一个神奇且有趣的存在, 它被广泛引用于标准库STL的编写中, 我们将在本条款中了解萃取器的功能及实现, 初步踏入模板元编程的世界.
2025-01-16 17:17:04
1072
原创 [Effective C++]条款46 友元非成员函数
本条款是条款24的延申讨论, 在引入模板的前提下, 如果我们想实现某些隐式类型转换的操作, 会需要比以往多一些额外的操作, 让我们通过本条款来理解.
2025-01-14 19:04:15
938
原创 [Effective C++]条款45 运用成员函数模板接受所有兼容类型
本条款中我们将会以智能指针为例, 介绍如何通过成员函数模板使一个模板类可以接受所有兼容类型.
2025-01-13 17:36:25
622
原创 [Effective C++]条款44 防止代码膨胀
我们知道代码重复和过度的inline都可能导致代码膨胀, 而在模板中会发生比较隐晦的代码重复, 我们应当尽力去避免代码重复的情况发生, 而最核心的方法就是将与参数无关的代码抽离templates, 让我们通过本条款进行了解.
2025-01-12 17:46:18
829
原创 [Effective C++]条款43 模板基类的继承
在本条款中我们将探讨继承与模板共同使用时的注意事项, 有些我们通过学习继承得来的直觉在这里可能不再适用, 当我们从Object Oriented C++ 跨进 Template C++, 继承就不像以前那样畅行无阻了.
2025-01-07 11:34:27
562
原创 [Effective C++]条款42 typename
本条款中我们将了解typename的两种使用场景, 对typename的内涵及使用加深认知.
2025-01-05 19:54:57
593
原创 [Effective C++]条款41 隐式接口和编译期多态
从本条款开始, 我们将开始讨论模板与泛型编程, templates最初知识为了建立类型安全的泛用容器, 但在不断的发展中泛型编程的观念逐渐成型, 使得我们拥有了将写出的代码和其所处理的对象类型彼此独立的技术. 在本条款中我们将了解两个泛型编程中的核心概念--隐式接口和编译期多态.
2025-01-03 16:49:44
531
原创 [Effective C++]条款40 多重继承
相比于java选择单继承+接口类多继承的方式, C++选择了更加直接的方式, 其允许多重继承存在. 不可否认的是确实大多数情况下单继承都可以胜任, 但是同样不可否认的是多重继承也一定有其用武之地. 在本条款中, 我们将认识多重继承, 了解辅助其实现的虚继承机制, 并且知晓多重继承的主要应用场景.
2025-01-01 19:48:53
667
原创 [Effective C++]条款38-39 复合和private继承
复合在应用层意味着has-a(有一个), 在实现层意味着is-implemented-in-terms-of(根据某物实现出). private继承也意味着is-implemented-in-terms-of, 但它只适用于特定情况下, 并没有复合泛用.
2024-12-23 20:21:44
898
原创 [Effective C++]条款35 virtual函数替换方案
我们都知道使用virtual函数是有代价的, 它会带来额外的开销, 譬如占用内存, 降低效率, 不好控制安全性等问题, 因此如果我们想构建一个逻辑缜密且标准的项目, 可以考虑一些virtual函数的替换方案, 或许会得到更强的安全性或更高的效率, 本条款将会介绍一些替换方案给你, 也许你会觉得复杂了许多, 但是这是在提升我们对各种程序设计方案的理解, 是对我们内核的修炼.
2024-12-19 16:35:02
582
原创 [Effective C++]条款34 接口继承和实现继承
作为class的设计者, 我们有时希望派生类只继承成员函数的接口, 有时又希望同时继承接口和实现, 有时又希望能够重写所继承的实现, 因此我们的选择是多样的, 这里大有可以探讨的地方, 本条款将带我们区分不同的继承方法, 并对其做出建议
2024-12-17 17:11:57
517
原创 [Effective C++]条款33 继承, 重载与作用域
我们知道在不同作用域下如果有相同名称的事物, 无论其功能或类型, 都是局部优先的. 继承的父子类也是类似, 不管是不是虚函数, 亦或是纯虚函数都完全没有关系, 都遵守相同名称局部优先的原则.
2024-12-16 15:37:45
437
原创 [Effective C++]条款32 public继承
从本条款开始我们将步入面向对象编程这一重要领域进行讨论, 首先我们将会围绕public继承, 分析public继承的意义与目的, 再举出两个错误的public继承典例.
2024-12-12 17:25:34
733
原创 [Effective C++]条款30 inline
inline 函数, 多么棒的点子! 本条款将带我们透彻了解inlining的里里外外, 与往常的形式不同, 我会以知识点集的形式把书中对inline的描述列举处理, 可更简单明了的认识inline.
2024-12-09 14:47:43
299
原创 [Effective C++]条款29 异常安全性
异常安全性是我们每个程序员都要考量的内容, 我们有必要知道我们写出的每个函数保证了怎样的异常安全, 因为一个函数是否会抛出异常不仅会影响我们是否使用该函数的决策, 也会影响部分的编译器优化策略, 让我们通过本条款来充分认识异常安全性.
2024-12-08 20:08:27
1008
原创 [Effective C++]条款28 避免返回handles指向对象内部成分
本条款虽说是避免返回handles指向对象内部成分, 但是其实内容着重在解释在必须返回handles指向对象内部成分的情况下, 会带来什么样的风险, 以此告诫我们注意.
2024-12-07 16:50:42
743
原创 [Effective C++]条款27 类型转换
优良的C++代码很少使用转型, 但是要完全摆脱它们又太过不切实际, 我们应当保证"类型错误"绝无可能发生. 本条款在了解各种转型动作的前提下, 指出了一些有风险的转型操作及其解决方法.
2024-12-06 17:24:28
782
原创 [Effective C++]条款26 尽可能延后变量定义式的出现时间
只要你定义了一个变量, 并且其类型带有构造函数或析构函数, 那么当程序控制流到达变量定义式时, 你便得承担构造成本; 当变量离开作用域时, 你便得承担析构成本. 本条款希望我们避免定义变量但最终并未使用的情况, 不要白白浪费构造和析构的成本.
2024-12-05 16:15:22
306
原创 [Effective C++]条款25 考虑写出一个不抛异常的swap函数
swap是一个有趣的函数, 原本它只是STL的一部分, 而后成为了异常安全性编程中的脊柱, 有关异常安全性我在条款11中介绍过, 在之后的条款29中也将着重着墨. 由于swap相当有用, 适当的实现非常重要, 好的swap设计可以带来非凡的效率提升, 本条款将着重描写如何写一个合格的swap函数.
2024-12-04 19:54:49
608
原创 [Effective C++]条款24 类型转换与non-member函数
虽然令classes支持隐式类型转换是一个坏主意, 但常常有许多意外出现, 有些类型之间的关联实在太强, 我们经常想把它们放在一起用, 例如支持int类型隐式转换为Rational(有理数), 当对便利性的需求非常强烈之后, 也许支持隐式类型转换也未必是坏事.
2024-12-03 16:08:09
470
原创 [Effective C++]条款22-23 封装性相关
封装的本质在于隐藏内部实现和暴露有限接口, 至于我们为什么推崇封装, 是因为它使我们能改变的事务只影响有限客户, 就是说大大降低了我们后期做出改变时的维护成本.
2024-12-02 20:42:56
605
原创 [Effective C++]条款21 必须返回对象时, 别妄想返回其reference
当程序员领悟了条款20所讲的pass-by-value的种种效率问题之后, 往往会变成十字军战士, 一心一意根除pass-by-value的存在, 然而这却会让他们犯下一些致命的错误, 通过本条款让我们来了解.
2024-12-01 12:18:08
533
原创 [Effective C++]条款20 宁以pass-by-reference-to-const替换pass-by-value
我们都知道, pass-by-value(传值传参)是一个费时费力的过程, 它会直接复制一个原件的拷贝, 如果是自定义类就会调用一次拷贝构造来实现复制, 函数结束时还要额外调用一次析构函数, 我们会很有意愿去削减这方面的花销.
2024-11-30 20:44:17
794
原创 [Effective C++]条款19 设计class犹如设计type
C++ 是面向对象编程语言, 当你定义了一个新class, 也就定义了一个新type. 然而设计一个优秀的class是一项艰巨的任务, 正如设计一个好的type是一项艰巨的任务. 本条款将依照一个好的类型应有的行为来指导我们class的设计, 并一一列举出来.
2024-11-29 15:46:15
415
原创 [Effective C++]条款18 设计正确易用的接口
C++在接口之海漂浮, 一个好的接口很容易被正确使用, 不容易被误用.条款18其实是一个很宏观的条款, 让接口变得正确易用, 简单来说就是"促进正确使用"和"阻止误用".
2024-11-28 19:33:36
1872
原创 [Effective C++]条款16-17 new 和 delete 相关
成对使用new和delete时要采用相同形式, 以独立语句将newed对象置入智能指针内.
2024-11-27 13:13:08
345
原创 [Effective C++]条款15 在资源管理类中提供对原始资源的访问
我们将资源存入资源管理类, 为的是可以免去资源管理的麻烦, 但同时我们也希望可以正常合理地通过资源管理类来使用资源, 就像直接使用资源一样, 为此我们一定需要在资源管理类中提供对原始资源的访问.
2024-11-26 15:30:12
404
原创 [Effective C++]条款14 资源管理类与copying行为
本条款是有关资源管理类要注意的行为. 在日常使用中, 我们何时使用shared_ptr, 何时自己构建资源管理类, 这是我们在本条款中需要首先解决的问题.
2024-11-25 15:48:44
567
原创 [Effective C++]条款13 以对象管理资源
所谓资源, 一旦用了它, 将来必须还给系统. 本条款及以后几项条款都致力于实现优秀的资源管理, 严守这些条款, 可以几乎消除资源管理问题.
2024-11-24 18:52:45
359
原创 [Effective C++]条款10-12 拷贝与赋值
很多类都有重写operator=函数的要求, 本质是 = 左侧调用 operator= 函数, 右侧作为参数传入, 将右侧参数赋值给左侧成员变量, 并且为了实现连锁赋值, 我们还应当使 operator= 返回当前赋完值的对象.
2024-11-23 09:34:27
2315
原创 [Effective C++]条款9 绝不在构造和析构过程中调用virtual函数
在base class构造期间, virtual函数不是virtual函数, 更细致的说就是base class构造期间virtual函数绝不会下降到derived class阶层. 原因很直观, base class 构造函数执行期间derived class的成员变量一定还未初始化, 如果此刻就可以通过virtual下降到派生类, 我们怎么确保这个虚函数不会调用派生类的成员变量呢? 太危险了, 所以C++不会让你走这条路.
2024-11-21 15:18:43
277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人