实习之路_C++晋级

看effective C++ 第五章 包括
1. 四种强制转换:const_cast. 常量性转除,就是把一个const的东西转换成non-const的;static_cast 应该就是最常用的那种吧, 强和隐性转换;dynameic_cats 决定对象归属继承体系(消耗大)
把base class的指针或引用像派生类转换;
Reinterpret_cast底层转换,实际结果取决于编辑器,例如要把int*变成byte^ Byte*
1. 内存溢出与泄漏的区别
2. 详细讲内存越界的缓冲区溢出与栈溢出(因为没有边界检测)
3. C++ 内存堆栈空间
4. mutex锁

2.Is-a 与has-a use-a 关系
• 说use-a就是组合咯,组合就是把另外 一个类的实例包含到本类当中,组合起来
而不需要用继承 有时候不是继承关系、你又要有继承的功能的时候就可以组合了。
• Public nono-virtaul成员函数间接调用private virtual 函数(NVI手法)
3. 显示接口 (在OOP中能进行看到的 ,源代码看到的 virtaul函数)隐性接口(在泛型编程中,接口是隐示的.
4. 模板化基类
派生类继承模板化基类的成员函数, 默认是无法访问, 模板化基类的命名.
原因是模板的定制化有可能取消某些函数, 为了能在编译期检测出错误, 所以默认无法访问.
• 调用基类函数时, 使用”this->”, 指明调用的类, 是本类, 在编译时, 可以进行检查;
• 使用using声明式, 可以把基类的函数引入派生类, 在编译时, 可以进行检查;
• 使用显示修饰(explicit qualification), 不推荐, 显示修饰会屏蔽virtual的动态绑定;
5. new-handle
当operator new申请一个内存失败的时候,它会进行如下的处理步骤:
1、如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常。
2、继续申请内存分配请求。
3、判断申请内存是否成功,如果成功则返回内存指针,如果失败转向处理步骤1
为了自定义这个“用以处理内存不足”的函数new_handler,用户可以调用set_new_handler进行设置
其中,new_handler是个typedef,定义一个函数指针,该函数没有参数,也没有返回值;
set_new_handler用于设置处理函数,设置p为当前处理函数,并返回之前的new_handler
6. 内存分配 new,operator new ,operator delete
new,operator new ,operator delete
operator new 和 operator delete:两个函数用来服务于 new 和 delete 操作符,以及对应的 operator new [] , operator delete [] 对应于 new [] 和 delete []相关的数组操作;这两个函数是可以被重载的,一般有全局默认的函数,自己也可以定义自己的,在定义C++类的时候也可以为某个class定制对应的 operator new 和 operator delete

你可能感兴趣的:(Cpp,实习之路)