zoukankan      html  css  js  c++  java
  • Impl模式实现之注意内联

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

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

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

     头文件:

     1 #ifndef MUDUO_TEMP_H
     2 #define MUDUO_TEMP_H
     3 
     4 #include <memory>
     5 
     6 class Temp
     7 {
     8 public:
     9     Temp();
    10     ~Temp();
    11 
    12 private:
    13     class Impl;
    14     std::unique_ptr<Impl> impl_;
    15 };
    16 
    17 
    18 #endif //MUDUO_TEMP_H

    源文件:

     1 #include "Temp.h"
     2 
     3 class Temp::Impl
     4 {
     5 public:
     6     Impl() = default;
     7 
     8     ~Impl() = default;
     9 };
    10 
    11 Temp::Temp()
    12         : impl_(new Impl())
    13 {
    14 
    15 }
    16 
    17 Temp::~Temp()
    18 {
    19 
    20 }

     解释:

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

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

    PS:

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

  • 相关阅读:
    04-增删改查
    03-编写dao实现类方式
    02-基于注解的入门案例
    .net core api 图片上传与加载
    笔记一、数据库初始化 约定
    .net core MVC中级教程(四)
    .net core MVC中级教程(三)
    Windows 盘符映射
    c# 队列和堆栈
    isValidNode
  • 原文地址:https://www.cnblogs.com/jason1990/p/9894485.html
Copyright © 2011-2022 走看看