02 2018 档案
摘要:困惑 首先,我知道select是IO复用。以UDP为例,select流程大体如下: 但是网上很多人都说这个框架使得服务端实现了并发。我很好奇的是,这个并发是怎么实现的? 因为select返回大于0后,开始检查read_fds,看是哪些FD已经可读。比如fd1和fd5可读了,我肯定先处理fd1的数据,
阅读全文
摘要:C++的静态成员是和类关联的,它属于某个类,但是不属于某个特定的对象。静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。 但是可以通过对象调用静态成员函数,虽然我们一般不会这么做: 在类外实现
阅读全文
摘要:从成员函数说起 在说const成员函数之前,先说一下普通成员函数,其实每个成员函数都有一个隐形的入参:T *const this。 const成员函数 声明形式是:int getValue() const; 编译器内部实现如下 表示this指针指向的内容是不可改变的,所以当试图修改val时会编译报错
阅读全文
摘要:只允许基础指针的一个所有者。 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr)。 替换已弃用的 auto_ptr。 相较于 boost::scoped_ptr。 unique_ptr 小巧高效;大小等同于一个指针,支持 rvalue 引用,
阅读全文
摘要:0、异常安全 C++没有内存回收机制,每次程序员new出来的对象需要手动delete,流程复杂时可能会漏掉delete,导致内存泄漏。于是C++引入智能指针,可用于动态资源管理,资源即对象的管理策略。 使用 raw pointer 管理动态内存时,经常会遇到这样的问题: 忘记delete内存,造成内
阅读全文
摘要:深拷贝和浅拷贝 所谓“深拷贝”和“浅拷贝”,各自代表不同的意义,各有所需。主要要分清值语意和引用语意。 值语意:x=y完成复制后,得到的x完全独立于y, x的改变不会影响原来的y。 引用语意:x=y完成复制后,修改x会影响y,x,y某种程度上共享了一片内存空间,存在耦合的。如下: 所以拷贝,其实都是
阅读全文
摘要:现象 工作中遇到一件怪事:搭建好服务器后(VPN服务器,创建了虚拟网卡),服务器和客户端之间响应正常且很稳定,客户端也能正常通过服务器访问外网。但是访问个别网站时可以打开文字,但是部分图片打不开(也不是所有图片打不开)。 分析 根据以上现象,基本排除了虚拟借口或者物理接口有问题,怀疑客户端和服务器之
阅读全文

浙公网安备 33010602011771号