【C++】pimpl惯用法

//传统.hpp
class A
{
private:
  int a_;
  std::string str_;
};

如果是暴露给外部的头文件,这样写会把头文件中的数据成员泄露出去。可使用pimpl惯用法。

//pimpl惯用法
//A.hpp
class Pimpl;  //前置声明
class A
{
public:
    void func();
private:
  class Pimpl;
  Pimpl* pimpl_;
};
//Pimpl类放在A.cpp中
class A
{
public:
	void func()
    {
        //访问数据成员进行操作
        std::cout<< pimpl_->GetA()
            	 << pimpl->GetStr() << "\n";
   	}
};


class A::Pimpl
{
public:
  int getA(){return a_;}
  std::string getStr(){return str_;}
private:
  int a_;
  std::string str_;
};

好处:

  • 隐藏数据成员
  • 当需要增删、修改数据成员、成员方法时,无需修改暴露的头文件,只需要修改Pimpl类即可
  • 加快编译速度:修改 Impl 类时只需重新编译该 A.cpp文件,不会导致依赖头文件【A.hpp】的其他源文件重新编译。
posted @ 2026-04-23 10:53  仰望星河Leon  阅读(7)  评论(0)    收藏  举报