自学内容网 自学内容网

【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)!