一.string和标准模板库
1.智能指针
auto_ptr 和 unique_ptr的区别
1.复制和赋值会改变资源的所有权,将一个auto_ptr对象管理的资源转移到另一个auto_ptr对象
2.在STL容器中存在风险,容器内的元素必须支持可赋值和可赋值
unique_ptr
1.无法进行左值unique_ptr复制构造,可以进行右值unique_ptr复制构造
2.在容器中保存指针是安全的
shared_ptr
复制拷贝计数加1,但析构时,计数减1,如果计数为0,代表没有指针指向这块内存,然后将其释放
2.vector
1.list<int> li
2.li.unique()
3.li.insert(li.end(), ar, ar + n)
二.友元,异常
1.友元
1.全局函数做友元
2.类做友元
3.成员函数做友元
2. thorw和return
thorw抛出异常时,会执行堆栈展开直到找到一个匹配的异常处理语句,而return将直接 返回,不会执行函数后面的代码
3. static_cast运算符和dynamic_cast
static_cast:隐式转换时使用,允许向上转换和向下转换。
dynamic_cast:将派生类的指针转换为基类的指针,沿层次向上转换。
三. C++代码重用
1.虚基类和非基类的区别
非虚基类的继承关系中,多个基类的共同祖先会存在多个相同的副本,而虚基类中共同的祖先只会保存一个副本。
此外,使用非虚基类时,派生类从不同的基类那里继承了多个同名的数据成员,如果没有类名进行限定,将导致二义性
四.类继承
1.静态联编和动态联编
静态联编:编译器在编译过程中将会根据具体情况选择和确定函数代码,这样的操作称为联编
动态联编:虚函数的引入导致在编译阶段编译器无法确定调用者是何种对象,因此编译阶段将无法完成联编的工作。推迟到运行阶段。
类的构造函数不能是虚函数,析构函数应该为虚函数,友元函数不能是虚函数。
2. 继承中的知识点
对于类来说,protected和private类似,类外无法访问protected和private
对于继承来说,protected和public类似,派生类无法直接访问private而可以访问protected和public
3.派生类无法从基类继承什么?
基类的构造函数,析构函数,复制运算符,友元函数和友元类
五