首页 > 其他分享 >PIMPL的优点和注意事项

PIMPL的优点和注意事项

时间:2024-03-01 18:14:33浏览次数:25  
标签:Use 头文件 实现 PIMPL 编译 优点 注意事项 构造函数

优点

  • 降低耦合度:使用PIMPL可以减少头文件的依赖,降低编译时的耦合度。
  • 隐藏实现细节:实现细节对使用者是不可见的,有利于封装。
  • 编译依赖减少:当实现改变时,不需要重新编译依赖于接口的代码,只需重新编译实现代码即可。

注意事项:

  • 运行时性能:每次通过指针访问实现类可能会有轻微的性能开销。
  • 资源管理:需要在构造函数中分配内存,在析构函数中释放内存。可以考虑使用智能指针(如 std::unique_ptr)简化资源管理。
  • 通过使用PIMPL技术,你可以有效地将你的类的接口与实现分离,同时避免了不必要的头文件包含,从而减少编译依赖和编译时间。

使用 PIMPL(Pointer to Implementation)技术可以有效地隐藏类的实现细节,减少编译依赖,同时使得接口(头文件)与实现(源文件)之间的耦合度降低。这样,当实现改变时,不会强制重新编译依赖于该头文件的其他代码,只要接口保持不变。

header file

// use.h
#pragma once

// 前向声明


class Use{
public:
    Use();
    ~Use(); // 注意:需要一个析构函数的声明

    // 禁用复制构造函数和赋值操作符
    Use(const Use&) = delete;
    Use& operator=(const Use&) = delete;

private:
    // PIMPL Idiom 的实现部分
    class Impl;
   std::unique_ptr<Impl> pImpl; // 唯一指向实现部分的指针
};

source file

// Use.cpp
#include<memory>
#include "Use.h"
#include "other.h"

class Use::Impl : public name::CallBack {
    // 实现细节
};

Use::Use() : pImpl(std::make_unique<Impl>()) {
    // 构造函数实现
}

Use::~Use() {
   
}

// 其他成员函数的实现...

标签:Use,头文件,实现,PIMPL,编译,优点,注意事项,构造函数
From: https://www.cnblogs.com/simp/p/18047646

相关文章

  • 安卓开发一个功能并将数据存储到Room中的流程以及注意事项
    开发流程与注意事项添加Room依赖:确保在build.gradle文件中添加了Room的依赖项。注意使用kapt插件而不是annotationProcessor来处理注解以及这二者之间的兼容性关系。定义实体(Entity):创建一个或多个实体类,用@Entity注解标记,表示数据库中的表。创建数据访问对象(DAO):定义一个接口,使......
  • stm32 中断处理函数注意事项
    一前记最近在公司的一个项目中碰到一个解决了定位很久的bug,bug找到的时候发现犯了很低级的错误——在中断处理函数中调用了printf函数,因为中断处理函数的调用了不可重入函数,导致接收到莫名其妙的数据。后面通过定位才发现这个是因为里面调用了不可重入函数导致的。那......
  • PIMPL
    PIMPL(PointertoImplementation)本质上也属于设计模式的一种,PIMPL也称为OpaquePointer(不透明的指针)。主要目的是将一个类的实现细节(private/protected方法、成员)和其对外的公共接口分离出来,使得实现细节可以在不影响客户端代码的情况下进行更改。这样做的好处主要有以下......
  • 国产USB 转串口芯片CH9102替换CP2102 需要改动什么以及注意事项说明
    CH9102是一个USB总线的转接芯片,实现USB转异步串口。提供了常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备或者MCU直接升级到USB总线。CH9102与CP2102可实现pin2pin兼容,可以在不更改硬件设计的前提下实现不同型号间快速切换与产品应用。CH9102系列......
  • seafile升级最新版注意事项(11.05版本为例)
    seafile升级最新版注意事项(11.05版本为例)笔者以当前最新版11.05为例,以下内容为亲测‍1、docker-compose.yml文件不能使用seafileltd/seafile-mc:latest,得用seafileltd/seafile-mc:11.05,具体原因不明,seafileltd/seafile-mc:latest现在是8.07的版本2、升级后会......
  • seafile升级最新版注意事项(11.05版本为例)
    seafile升级最新版注意事项(11.05版本为例)笔者以当前最新版11.05为例,以下内容为亲测‍1、docker-compose.yml文件不能使用seafileltd/seafile-mc:latest,得用seafileltd/seafile-mc:11.05,具体原因不明,seafileltd/seafile-mc:latest现在是8.07的版本2、升级后会......
  • 游戏网站策划注意事项
    今天我接触个游戏网站策划,我认为游戏网站策划是一个综合性的过程,涉及多个方面,https://www.fuligou8.com/noking/21587.html  包括市场分析、用户需求、内容规划、技术实现、商业模型等。我感觉很麻烦以下是一个基本的游戏网站策划框架及例子:市场分析调研现有的游戏网站,了......
  • Base64编码的优点与缺点
    Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式。它被广泛应用于数据传输和存储,以提升数据的可读性、可传输性和安全性。Base64编码解码|一个覆盖广泛主题工具的高效在线平台(amd794.com)https://amd794.com/base64encordec一、Base64编码的优点:可打......
  • 坏人的优点
    《07-坏人的优点》坏人的优点,从某种角度排除坏人的自私,虚荣,狭隘,嫉妒,浅薄,虚伪的心理,他的所有的一切都是优点,比如,工于心计,不受道德束缚,为达目的不择手段,无耻,下三滥,无赖,阴谋诡计,权术。好人要想变强必须吸收坏人的优点,因为现实社会是一个丛林社会,弱肉强食适者生存,好人的善良太过保守......
  • 一些cpp注意事项
    array拷贝至vectorintA[]={1,2,3,4};intAsize=sizeof(A)/sizeof(int);vector<int>V(A,A+Asize);sort()函数中的cmp()必须遵循严格弱序//升序boolcmp1(constint&a,constint&b){ returna<b;}//降序boolcmp2(constint&a,const......