19.1控制内存分配
- new过程:一、operator new标准库函数,分配原始未构造内存;二、编译器运行相应构造函数;三、返回指针
- operator delete释放内存空间
- 定位new: new (place_address) type (initializers),
定位new允许我们在一个特定的。预先分配的内存地址上构造对象
1. 定位new与allocator的construct成员非常相似,但有重要区别:传递给construct的指针必须指向同一个allocator对象分配的空间,但是传递给定位new的指针无须指向operator new分配的内存,甚至不需要指向动态内存
- 调用析构函数会销毁对象,但是不会释放内存
19.2 运行时类型识别
- dynamic_cast:用于将基类的指针或引用安全的转换成派生类的指针或引用
- typeid:返回表达式的类型
- 以上两个运算符特别适用于以下情况:我们想使用基类对象的指针或引用执行某个派生类操作并且该操作不是虚函数。一般来说应该尽量使用虚函数。然而,并非任何时候都能定义一个虚函数。当无法使用虚函数时,使用RTTI运算符。
- **
使用RTTI必须要加倍小心。在可能的情况下,最好自定义虚函数而非直接管类型管理的重任。
**
19.3 枚举类型
- 枚举类型使我们可以将一组整型常量组织在一起,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型
- 限定作用于枚举类型:
enmu class/struct open_modes{input,output,append};
- 不限定作用域的枚举类型中,枚举成员的作用域于枚举类型本身的作用域相同
- 默认情况下,枚举值从0开始,依次加1
- 枚举成员是const,因此初始化枚举成员是提供的初始值必须是常量表达式
- 一个不限定作用域的枚举类型的对象或枚举成员自动第转换成整型
int i=color::red;
- 要想初始化enum对象或者为enum对象赋值,必须使用该类型的一个枚举成员或者该类型的另一个对象
19.4 类成员指针
- 一般情况下,指针指向一个对象,但是成员指针指示的是类的成员,而非类的对象
19.5 嵌套类
1. 一个类可以定义在另一个类的内部,前者称为嵌套类
19.7 局部类
类可以定义在某个函数的内部,我们成这样的类为局部类
19.8固有的不可移植的特性
- volatile限定符:和const类似。。。