pimpl
这种方法用于向用户隐藏实现细节
例如存在库的头文件:
class lib {
public:
lib();
~lib();
int fun();
private:
int field1_;
char field2_;
int foo();
};
用户可以从字段名和方法名推测出库的具体实现方法。
pimpl方法就是将想要隐藏的细节放入一个内部中,内部类的具体信息也隐藏在cpp文件中
lib.h
#include <memory>
class lib {
public:
lib();
~lib();
int fun();
private:
class pimpl;
// pimpl* pimpl_;
std::unique_ptr<pimpl> pimpl_;
};
lib.cpp
#include "lib.h"
class lib::pimpl {
public:
int field1_;
char field2_;
int foo() { return 0; }
};
lib::lib() : pimpl_(std::make_unique<pimpl>()) {}
lib::~lib() {}
int lib::fun() { return pimpl_->foo(); }
具体的实现类在类的内部定义和实现,在构造函数和析构函数中管理其生命周期。可以使用智能指针。
该方法优点:
- 核心数据成员被隐藏,不必隐藏在头文件中
- 降低编译依赖,提高编译速度。
- 接口与实现分离