7.12 清除容器的指针

在Stlshape.cpp中,容器中的那些指针自己不会自动清除。有方便的方法能很容易地做这些事情,不必每一次都为此编写专用代码。这里有个能够清除任何序列容器中指针的函数模板。注意,它被放置在本教材的根目录下面以方便使用:

7.12 清除容器的指针 - 图1

在purge()的第1版中,要注意关键字typename是绝对必需的。该关键字正是设计用来解决问题的:Seq是一个模板参数,而iterator则是嵌套在该模板中的某种东西。那么Seq:iterator做什么用呢?关键字typename说明,它提到的是个类型,而不是其他什么东西。

虽然purge()的容器版本必须与一个STL风格的容器一起工作,但purge()的迭代器版本的工作区域则涵盖了所有范围,包括数组。

这里有一个重写了的Stlshape.cpp,修改并使用了purge()函数:

7.12 清除容器的指针 - 图2

在使用purge()时,要仔细考虑该函数的所有权问题。如果在多个容器中持有同一个对象的指针,要确信不对其进行两次删除操作。不希望在第2个容器结束对该对象的使用之前就在第1个容器中将其销毁。对一个容器进行两次清除操作purge()不会产生问题,因为purge()在删除一个指针后将其值置为零,对一个零指针调用删除操作delete是一个安全的操作。