【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】的其他源文件重新编译。

浙公网安备 33010602011771号