##类和数据抽象
构造函数
-
智能指针
问题:1、忘记delete,内存泄漏;2、还有指针引用,就释放 了对象,产生非法内存指针
三种智能指针 share_ptr weak_ptr unique_ptr
析构函数
强引用和弱引用
引用和 指针的关系
-
new 和malloc的区别
new返回对象的指针,销毁对象
tcp 和udp的区别
友元函数
成员函数
this指针
非静态成员函数中访问类的非静态成员,编译器会自动将对象本身的地址作为一个隐含参数传递给函数
在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
const 函数重载
-
类的作用作用域
只在该类是已知的,类外未知的。可以在不同的类中使用名称相同的类成员而不引起冲突。
-
虚函数和纯虚函数virtual
虚函数 virtual void play():允许用基类的指针来调用子类的这个函数
纯虚函数(virtual void print() = 0;):纯虚函数是为了实现一个接口,纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。
-
纯虚函数对类最大的束缚就是:类中一旦出现纯虚函数,就不可实例化了;
纯虚函数可以有函数体,最终还是要被派生类重写,在派生类的函数中可以调用基类中有函数体的纯虚函数;
为使派生类能完全释放资源,基类析构函数必须声明为虚函数,否则,在用基类指针new一个派生类对象后,delete该指针就只能回收与基类相关的资源,造成内存泄漏;
纯虚析构函数必须要有函数体,根据C++析构函数的调用规则,派生类会调用基类析构函数,如果基类析构函数没有函数体会造成函数调用失败而报错,这是纯虚析构函数与普通纯虚函数不同之处。
const 对象的构造函数
重载运算符
static成员
面向对象和泛型编程
- 继承
- 多态
容器和算法
- vector
- set
- list
- hashset
算法
- 排序
- 数组去重
- 字符串去重
- 二叉树
- 链表翻转 倒序
设计模式
单例模式
工厂模式
socket编程
epoll和select poll的区别
select==>时间复杂度O(n)
无差别轮询所有流; 单个进程可监视的fd数量被限制,即能监听端口的大小有限,对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低:
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的.
epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd),这种模式比水平触发效率高,系统不会充斥大量你不关心的就绪文件描述符,没有最大并发连接的限制,能打开的FD的上限远大于1024(1G的内存上能监听约10万个端口);
2、效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。只有活跃可用的FD才会调用callback函数;
即Epoll最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll的效率就会远远高于select和poll。
组件使用
动态组件
静态组件
多线程的理解
死锁操作
GDB
mfc
QT