C++ premier -- 内存管理与RTTI
第18章对于没有多少项目经验的我来说有些东西还真的是不知道实际应该如何应用,这些都涉及设计吧我想。看完这一篇,体会比较深的是内存管理和运行时类型识别,其他的包括类成员指针、嵌套类、局部类、联合等,看完只能说,知道了有这么回事,呵呵。
创建对象一般涉及两个过程,一是分配内存,然后构造对象,这两者相互纠缠在一起,就像对象析构和回收内存一样。构造对象指的是运行构造函数,包括对数据成员进行赋值;析构对象指的是运行析构函数,包括释放构造对象时动态请求的资源。C++中提供了两种方法来完成这些事情:
1. 使用allocator类。
allocator类是一个模板,它提供类型化的内存分配以及对象构造与撤销,下面是该类支持的操作:

?Vector类的实现把里面的操作基本都用上了:
?首先,该表达式调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象;
?接着,运行该类型的一个构造函数,用指定初始化式构造对象;
?最后,返回指向新分配并构造的对象的指针,但指针类型为void*。
标准库中的operator new和operator delete,它们分配和释放需要大小的原始的、未类型化的内存。
同样,当使用delete表达式 delete sp的时候,实际上也发生了两个步骤:
?首先,对sp指向的对象运行适当的析构函数
?接着,通过调用名为operator delete的标准函数释放该对象所用的内存。
operator new和operator delete函数有两个重载版本,每个版本支持相关的new表达式和delete表达式:void f( const Base& b ){try{const Derived& d = dynamic_cast<const Derived&>(b);//use Derived object to which derivedPtr points}catch( bad_cast ){//use the Base object to which basePtr points}typeid要注意的是,typeid的操作数是表示对象的表达式,对于指针,返回的类型是是“指向<静态类型>的指针”
后面的内容就不总结了,我觉得没有一定的项目经验,那些东西的好处其实也是无法体会的,呵呵。