August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
使用像unique_ptr这样的智能指针看上去有点特别。如何保证我们已经发现了所有需要保护的指针?如何保证我们已经释放了所有指向不应在作用域末尾销毁的对象的指针?考虑14.3.5节中的reserve():
注意,对已有元素的拷贝操作alloc.construct(&p[i],elem[i])可能会抛出异常。因此,p是我们在14.5.1节中所描述问题的一个例子。我们可以采用unique_ptr解决方案。一个更好的解决方案是,将“vector所用内存”认为是一种资源;也就是说,我们可以定义一个vector_base类以代表我们一直使用的基本概念。下图中的三个元素定义了vector的内存使用:
vector_base的代码(为保持完整性而加入了分配器)如下:
注意,vector_base处理的是内存而不是(带类型的)对象。我们的vector实现可以将它用于存储所需元素类型的对象。本质上,vector是vector_base的一个便捷的接口:
我们可以按如下更简单也更正确的方式重新实现reserve(): ...