PIMPLとは?
1544 ワード
転載先:https://www.cnblogs.com/joinclear/p/3908661.html作者:joinclearありがとう
問題は陳碩《Linuxマルチスレッドサービス端プログラミング》第11章11.4節に由来する.
「C++プログラミング規範」第43条を参考にすることができる
---------------------------------------------------------------------------------------
0、はじめに
PIMPL:実用的な基礎モードです.
1、PIMPL解釈
PIMPL(Private ImplementationまたはPointer to Implementation)は、ポインタが指すクラスの内部実装データをプライベートメンバーポインタで非表示にします.
2、PIMPLのメリット
PIMPLの利点:
1)モジュールの結合を低減する.クラスの実装が隠されているため、隠されたクラスは元のクラスが見えないことに相当し、隠されたクラスを修正し、元のクラスを再コンパイルする必要はありません.
2)コンパイル依存性を低減し,コンパイル速度を向上させる.ポインタのサイズは(32ビット)または8(64ビット)であり、Xは変化するが、ポインタのサイズは変化せず、ファイルc.hも再コンパイルする必要はない.
3)インタフェースと実現の分離、インタフェースの安定性を高める.
1、コンパイラによって生成されたコードには、「new C」または「C c 1」が定義されている場合、Xの情報はドープされません.
2、Cを使用する場合、Cのインタフェース(Cインタフェース内で操作されるクラスは、実はpImplメンバーが指すXオブジェクト)を使用し、Xに関係なく、Xはポインタパッケージによって徹底的に分離される.
問題は陳碩《Linuxマルチスレッドサービス端プログラミング》第11章11.4節に由来する.
「C++プログラミング規範」第43条を参考にすることができる
---------------------------------------------------------------------------------------
0、はじめに
PIMPL:実用的な基礎モードです.
1、PIMPL解釈
PIMPL(Private ImplementationまたはPointer to Implementation)は、ポインタが指すクラスの内部実装データをプライベートメンバーポインタで非表示にします.
2、PIMPLのメリット
:
//x.h
class X
{
public:
void Fun();
private:
int i; //add int i;
};
//c.h
#include
class C
{
public:
void Fun();
private:
X x; // X
};
PIMPL :
//c.h
class X; // #include
class C
{
public:
void Fun();
private:
X *pImpl; //pimpl
};
PIMPL :
//c.h
class X; // #include
class C
{
public:
void Fun();
private:
X *pImpl; //pimpl
};
PIMPLの利点:
1)モジュールの結合を低減する.クラスの実装が隠されているため、隠されたクラスは元のクラスが見えないことに相当し、隠されたクラスを修正し、元のクラスを再コンパイルする必要はありません.
2)コンパイル依存性を低減し,コンパイル速度を向上させる.ポインタのサイズは(32ビット)または8(64ビット)であり、Xは変化するが、ポインタのサイズは変化せず、ファイルc.hも再コンパイルする必要はない.
3)インタフェースと実現の分離、インタフェースの安定性を高める.
1、コンパイラによって生成されたコードには、「new C」または「C c 1」が定義されている場合、Xの情報はドープされません.
2、Cを使用する場合、Cのインタフェース(Cインタフェース内で操作されるクラスは、実はpImplメンバーが指すXオブジェクト)を使用し、Xに関係なく、Xはポインタパッケージによって徹底的に分離される.
//c.cpp
C::C()pImpl(new X())
{
}
C::~C()
{
delete pImpl;
pImpl = NULL;
}
void C::Fun()
{
pImpl->Fun();
}
//main
#include
int main()
{
C c1;
c1.Fun();
return 0;
}