【C++】模板与泛型编程(一):定义模板,控制实例化、效率与灵活性
16.1.5 控制实例化
当模板使用时才会进行实例化。这一特性意味着,相同的实例可能出现在多个对象文件中。当两个或多个独立编译的源文件使用了相同的模板,并提供了相同的模板参数时,每个文件中就都会有该模板的一个实例。
在大系统中,在多个文件中实例化相同模板的额外开销可能非常严重。在 C++ 11 中,可以通过显式实例化来避免上述开销。一个显式实例化有如下形式:
extern template declaration;// 实例化声明
template declaration;// 实例化定义
declaration 是一个类或函数声明,其中所有模板参数已被替换为模板实参,例如:
extern template class Blob<string>;// 声明
template int compare(const int &, const int &);// 定义
当编译器遇到 extern 模板声明时,它不会在本文件中生成实例化代码。将一个实例化声明为 extern 就表示承诺在程序其他位置有该实例化的一个非 extern 声明(定义)。对于一个给定的实例化版本,可能有多个 extern 声明,但必须只有一个定义。
实例化定义会实例化所有成员
16.1.6 效率与灵活性
在运行时绑定删除器
通过在运行时绑定删除器,shared_ptr 使用户重载删除器更为方便。
在编译时绑定删除器
通过在编译时绑定删除器,unique_otr 避免了间接调用删除器的运行时开销。
原文地址:https://blog.csdn.net/Coffeemaker88/article/details/144703708
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!