//
//pimpl 这种做法还保障了二进制兼容性,让动态库的升级变得更容易。
//隐藏了实现的细节.
//C++代码
// A.h
class AImpl;
class A {
public:
A();
~A();
void func();
private:
A(const A&);
void operator=(const A&);
AImpl* impl_;
};
// A.cpp
class AImpl {
public:
void func();
private:
int
myFunc(int myParam);
private:
int _myVariable;
};
A::A()
: impl_(new AImpl)
{
}
A::~A()
{
delete impl_;
}
void A::func()
{
impl_->func();
}
// A.h
//pimplidiom 指向实现的指针
//pimpl 这种做法还保障了二进制兼容性,让动态库的升级变得更容易。
//隐藏了实现的细节.
#pragma once
class A {
public:
A();
~A();
void func();
private:
A(const A&);
void operator=(const A&);
class AImpl; // 声明,不是定义
AImpl* impl_;
};
// A.cpp
// 在这里定义,完全不暴露
#include "a.h"
class A::AImpl {
public:
void func(){
}
private:
int myFunc(int myParam);
private:
int _myVariable;
};
A::A()
: impl_(new AImpl)
{
}
A::~A()
{
delete impl_;
}
void A::func()
{
impl_->func();
}