当前位置: 首页 > news >正文

【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 避免了间接调用删除器的运行时开销。


http://www.mrgr.cn/news/81230.html

相关文章:

  • 概率论 期末 笔记
  • Genesis引擎function glGetUniformLocation not found问题详解
  • 有了chatgpt4o,普通人还需要学代码吗?
  • 【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数
  • 中小学教室多媒体电脑安全登录解决方案
  • golang, go sum文件保证下载的依赖模块是一致的
  • NLP 中文拼写检测纠正论文-02-2019-SOTA FASPell Chinese Spell Checke github 源码介绍
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin
  • MacroSan 2500_24A配置
  • 重温设计模式--工厂模式(简单、工厂、抽象)
  • Genesis世界模型的上手与测试
  • 【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块
  • 一起学Git【第五节:git版本回退】
  • js的节流与防抖方法封装
  • 大数据实验三
  • 重温设计模式--组合模式
  • 百度慧眼百度热力图数据处理,可直接用于论文
  • 如何与AI对话,写好Prompt
  • 重温设计模式--观察者模式
  • Vulhub靶场Apache漏洞
  • 华为实训课笔记 2024 1223-1224
  • nginx—rewrite功能
  • NS3学习——队列管理机制
  • 题解 洛谷 Luogu P1135 奇怪的电梯 广度优先搜索 BFS C/C++
  • Debian环境安装Docker Engine
  • 重温设计模式--迭代器模式