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(); }

具体的实现类在类的内部定义和实现,在构造函数和析构函数中管理其生命周期。可以使用智能指针。

该方法优点:

  1. 核心数据成员被隐藏,不必隐藏在头文件中
  2. 降低编译依赖,提高编译速度。
  3. 接口与实现分离
posted @ 2022-10-29 10:14  某某人8265  阅读(49)  评论(0编辑  收藏  举报