本文主要是介绍c++ pimpl惯用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
介绍
Pimpl(Pointer to implementation) 是一种减少代码依赖和编译时间的C++编程技巧,其基本思想是将一个外部可见类(visible class)的实现细节(一般是所有私有的非虚成员)放在一个单独的实现类(implementation class)中,而在可见类中通过一个私有指针来间接访问该实现类。(如 std::unique_ptr
)
什么是 Pimpl 惯用法?
Pimpl 是 “Pointer to Implementation” 的缩写,将其打包成头文件和动态库的形式,交给第三方去使用,这个模式可以帮助我们:
- 将接口和实现分离,实现信息隐藏
- 减少头文件中的依赖
- 实现库的平滑升级(实现文件有变动,只需要替换动态库即可)
- 编译防火墙(只要头文件不变,第三方产品不需要重新进行编译的)
- 加速编译
基本实现
基本的 Pimpl 实现需要一个前置声明的内部类和一个指向该内部类的指针。在这里,我们使用 std::unique_ptr
来管理这个内部类的实例。
MyClass.h
#include <memory>class MyClassImpl; // 前置声明class MyClass {public:MyClass();~MyClass();void DoSomething();private:std::unique_ptr<MyClassImpl> pimpl;};
MyClass.cpp
#include "MyClass.h"class MyClassImpl {public:void DoSomething() {// 实现细节}};MyClass::MyClass() : pimpl(std::make_unique<MyClassImpl>()) {}MyClass::~MyClass() = default;void MyClass::DoSomething() {pimpl->DoSomething();}
总结
通过使用 Pimpl 惯用法和智能指针,我们能更有效地隐藏实现细节,提高编译速度,并使代码更易于维护。
这篇关于c++ pimpl惯用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!