摘要: 为什么要重载运算符“=”和拷贝构造函数? 1. 为了给类赋予新的能力的同时保持语义。比如之前文章提到的迭代器(iterator)重载自加操作符,就是为了保持语义; 2. 类的职责多样,有的类的拷贝过程默认拷贝构造函数无法满足,需要定制(比如深拷贝)。 拷贝构造/移动构造函数 拷贝构造函数重载相信我们 阅读全文
posted @ 2020-02-29 21:02 joeyzzz 阅读(1031) 评论(0) 推荐(0) 编辑
摘要: 为什么使用epoll 这个是老生常谈了,四个字,多路复用,要不单线程只能停等排队。另外select和poll不如epoll强大好用。 程序结构漫谈 代码很简陋,基本属于玩具。但是还是随便谈谈。 在单线程模型下使用epoll,只能使用一个epoll的instance同时监听socket描述符和conn 阅读全文
posted @ 2020-02-25 21:37 joeyzzz 阅读(862) 评论(0) 推荐(0) 编辑
摘要: 思维导图 一些收获 条件变量的虚假唤醒(spurious wakeup) 使用条件变量,可以让线程等待某个条件,从而进入睡眠,当由 其他线程所控制 的布尔表达式满足条件时,再由操作系统将其唤醒。条件变量的使用需要搭配一个互斥器,有一套几乎不变的范式 上面的代码提出了两个问题。先说问题1,条件变量在初 阅读全文
posted @ 2020-02-17 21:26 joeyzzz 阅读(1033) 评论(0) 推荐(0) 编辑
摘要: 前言 以前经常把这两个概念混为一谈,虽然这它们的概念类似,有一定的相似性,但是各自的成因和解决防范方法都是不同的,特记录在此。 空悬指针 定义 一个原生指针分配内存后,它并没有探测内存是否已经被释放或者被损坏的能力。当所管理的内存被释放后,若这个指针没有被销毁或置为NULL,它就成了一个空悬指针。 阅读全文
posted @ 2020-02-08 16:38 joeyzzz 阅读(491) 评论(0) 推荐(0) 编辑
摘要: muduo书第一章的思维导图(新窗口打开可以看大图) 线程安全的对象析构和回调(使用shared_ptr和weak_ptr) 注释是英文的(工地英语…) StockFactory.h StockFactory.cpp 阅读全文
posted @ 2020-02-08 16:19 joeyzzz 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 介绍 enable_shared_from_this类位于标准库的中,当一个类T公有继承它,如 类T会继承到一个公有方法 要在T类中使用该函数,是继承enable_shared_from_this类的唯一目标。 要解决的问题 如果一个程序中,对象内存的生命周期的全部由智能指针来管理。在这种情况下,要 阅读全文
posted @ 2019-08-15 15:46 joeyzzz 阅读(1678) 评论(0) 推荐(0) 编辑
摘要: 内置类型的前置++和后置++ ` 换言之, 前置++和后置++的区别仅在于++运算符的返回值是自加过后的结果或者是自加之前的副本 在类中重载它们 可以看出,如果只是单纯的为了把私有变量i加一,后置++要使用一个tmp在函数栈上保存自加之前的类的副本,会造成额外的内存开销,没有必要,除非遇到了要保存自 阅读全文
posted @ 2019-08-09 10:15 joeyzzz 阅读(1188) 评论(1) 推荐(0) 编辑
摘要: 结论 为了让push_back的均摊(amortized)时间复杂度为常数时间。 基础 首先我们都知道vector在size超过capacity的时候,会另寻2倍于capacity的堆空间,然后把原来的数据搬移到新空间上,再释放旧空间。在这个过程中,将原有的数据搬移到新空间是比较费时的操作,平均时间 阅读全文
posted @ 2019-07-06 18:01 joeyzzz 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 原文:https://stackoverflow.com/questions/381244/purpose of memory alignment 翻译:joey The memory subsystem on a modern processor is restricted to accessin 阅读全文
posted @ 2019-06-20 17:12 joeyzzz 阅读(448) 评论(0) 推荐(0) 编辑