考虑以下:
PImpl.hpp
class Impl;
class PImpl
{
Impl* pimpl;
PImpl() : pimpl(new Impl) { }
~PImpl() { delete pimpl; }
void DoSomething();
};
Run Code Online (Sandbox Code Playgroud)
PImpl.cpp
#include "PImpl.hpp"
#include "Impl.hpp"
void PImpl::DoSomething() { pimpl->DoSomething(); }
Run Code Online (Sandbox Code Playgroud)
Impl.hpp
class Impl
{
int data;
public:
void DoSomething() {}
}
Run Code Online (Sandbox Code Playgroud)
client.cpp
#include "Pimpl.hpp"
int main()
{
PImpl unitUnderTest;
unitUnderTest.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
这种模式背后的想法是,Impl界面可以改变,但客户端不必重新编译.然而,我没有看到这是如何真实的情况.假设我想在这个类中添加一个方法 - 客户端仍然需要重新编译.
基本上,只有种这样的,我可以看到的变化不断需要改变头文件一类的东西,其中的类发生变化的接口.当发生这种情况时,pimpl或没有pimpl,客户端必须重新编译.
这里的哪种编辑在不重新编译客户端代码方面给我们带来了好处?