最近学习muduo源码时,对于内联函数有了更深刻的认知.

内联(inline)在代码执行方面具有优势,但是有时使用不当,或者稍微不注意,就会造成编译错误.

以下将通过Impl实现说明一二:

头文件:

 #ifndef MUDUO_TEMP_H
#define MUDUO_TEMP_H #include <memory> class Temp
{
public:
Temp();
~Temp(); private:
class Impl;
std::unique_ptr<Impl> impl_;
}; #endif //MUDUO_TEMP_H

源文件:

 #include "Temp.h"

 class Temp::Impl
{
public:
Impl() = default; ~Impl() = default;
}; Temp::Temp()
: impl_(new Impl())
{ } Temp::~Temp()
{ }

解释:

(1)构造函数在源文件实现,比较容易理解,因为在头文件中并未具体实现Impl,无法通过new创建Impl实例;

(2)尽管析构函数是空的,但是也必须放在源文件中进行定义,否则编译期隐式声明的~Temp() inline展开的时候无法寻找到Impl()::~Impl的声明,会出现编译报错.

PS:

如果您觉得我的文章对您有帮助,可以扫码领取下红包,谢谢!

Impl模式实现之注意内联的更多相关文章

  1. CSS文档流与块级元素和内联元素(文档)

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不 少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指 南> ...

  2. CSS块元素与内联元素(转)

    为什么<a><span>这种标签定义width,height等CSS属性时会发现完全不生效? 因为它们不是容器,它们是内联元素,不是块元素 CSS 块元素与内联元素 关键字: ...

  3. Html 内联元素、外联元素 和 可变元素

    块元素(block element)一般是其他元素的容器元素 块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签'P".“form"这个块元素比较特殊,它 ...

  4. C#内联函数 特性 MethodImplOptions.AggressiveInlining)

    [MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数 ...

  5. ASP.NET Core的路由[5]:内联路由约束的检验

    当某个请求能够被成功路由的前提是它满足某个Route对象设置的路由规则,具体来说,当前请求的URL不仅需要满足路由模板体现的路径模式,请求还需要满足Route对象的所有约束.路由系统采用IRouteC ...

  6. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  7. 送干货,实用内联gulp插件——gulp-embed

    现在npm上有很多gulp内联工具,用于把脚本和样式内嵌到HTML页面上,之前搞项目我也在这些插件中寻觅许久,但均不满足公司项目的一个需求—— HTML上同时插入了开发(dev版,src文件夹下,比如 ...

  8. Box Model,边距折叠,内联和块标签,CSSReset

    一.盒子模型(Box Model) 1.1.宽度测试 1.2.溢出测试 1.3.box-sizing属性 1.4.利用CSS画图 二.边距折叠 2.1.概要 2.2.垂直方向外边距合并计算 三.内联与 ...

  9. CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

随机推荐

  1. nginx集成环境下载

    https://visual-nmp.en.softonic.com/download

  2. weblogic linux环境下新建domain

    1. cd /home/weblogic/Oracle/Middleware/wlserver_10.3/common/bin 2. ./config.sh -mode=console(用控制台模式安 ...

  3. java的多态性

    class test1{    int a=3;    public test1(int a)    {        this.a=a;    }    public void aa()    {  ...

  4. SHELL脚本学习-定时检查Oracle alert日志并发送mail

    对于DBA来说,检查alert日志是日常工作.告警日志日积月累往往很大,而且每次在服务器上查看或者下载到目标主机查看都十分不方便. 为了方便,以下做出两种情况:(其他情况类推) 第一场景:每天早上上班 ...

  5. 【微信小程序】模仿58同城页面制作以及动态数据加载

    完成动态数据的加载,如下 使用上班的空余时间慢慢的学习,相信总有一天我会很熟悉的掌握这门技术. 本次学习小总结: 微信小程序使用的代码基本与HTML.CSS.JS等前段有关知识一样. 微信小程序js使 ...

  6. C++标准库第二版笔记 3 和异常的理解 1

    C++标准库第二版笔记 3 和异常的理解 1 差错和异常(error and exception)的处理 标准异常类(exception class) 定义于 分为: 1.语言本身支持的异常 2.标准 ...

  7. Python Day 6

    阅读目录:   内容回顾:   深浅拷贝:   元组:   字典   集合 ##内容回顾 #1.数字类型 int | float | bool | complex #2.字符串 #常规操作: -- 索 ...

  8. Codeforces 1065 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 GGG题略难,膜了一波zhouyuyang{\color{red} zhouyuyang}zhouyuyang巨佬的代码. 其余都挺清真的. ...

  9. HTML5结构标签

    <!DOCTYPE html> <!-- ↑ 文档声明.HTML5已经简化为上述样式! 注意:文档声明必须有!而且必须在文档页面的第一行!   HTML4.01之前的文档声明: &l ...

  10. ubuntu installs matlab2017a

    cd mkdir matlab sudo mount -o loop *1.iso matlab sudo ./matlab/install ... sudo mount -o loop *2.iso ...