Oracle Solaris Studio 12.2:C++ 用户指南

7.2 系统信息库管理

CCadmin(1) 命令管理模板系统信息库(只能与选项 -instances=extern 一起使用)。例如,程序中的更改会造成某些实例化过度,这样会浪费存储空间。CCadmin – clean 命令(以前是 ptclean)清除所有实例及关联数据。实例化仅在需要时才重新创建。

7.2.1 生成的实例

为了生成模板实例,编译器将内联模板函数看作内联函数。编译器像管理其他内联函数一样管理这些内联模板函数,另外本章中的说明不适用于模板内联函数。

7.2.2 整个类实例化

编译器通常是分别实例化各个模板类成员,因此,编译器仅实例化程序中使用的成员。仅用于调试器的方法会因此而不正常地实例化。

有两种方法确保调试成员可用于调试器。

ISO C++ 标准允许开发人员编写模板类,因为并不是所有成员都可以使用模板参数。只要非法成员未被实例化,程序就仍然完好。ISO C++ 标准库使用了这种技术。但是,-template=wholeclass 选项会实例化所有成员,因此不能用于此类使用有问题的模板参数实例化的模板类。

7.2.3 编译时实例化

实例化是 C++ 编译器从模板创建可用的函数或对象的过程。C++ 编译器使用了编译时实例化,在编译对模板的引用时强制进行实例化。

编译时实例化的优点是:

如果源文件位于不同的目录或您使用了具有模板符号的库,则模板可以多次实例化。

7.2.4 模板实例的放置和链接

缺省情况下,实例会进入特殊地址区域,链接程序会识别并丢弃重复项。您可以指示编译器使用五个实例放置和链接方法之一:外部、静态、全局、显式和半显式。

本节讨论了五种实例放置和链接方法。6.3 模板实例化中提供了有关生成实例的其他信息。