次の方法で共有


コンパイル時のカプセル化の Pimpl (Modern C++)

pimpl の用法は 実装を非表示にし、結合を最小化し、インターフェイスを区切るに最新 C++ の方法です。Pimpl は "実装へのポインターには短い" です。既に概念について理解チェシャーの猫またはコンパイラのファイアウォールの"などの名前によってこれを知ることがあります。

理由 pimpl を使用します。

ここで pimpl の方法がソフトウェア開発ライフサイクルが向上することです:

  • コンパイルの依存関係の最小化。

  • インターフェイスおよび実装の分離。

  • 移植性。

Pimpl のヘッダー

// my_class.h
class my_class {
   //  ... all public and protected stuff goes here ...
private:
   class impl; unique_ptr<impl> pimpl; // opaque type here
};

pimpl の用法はリビルドのカスケードと脆弱なオブジェクトのレイアウトを回避できます。これは (他動詞として) 好型の場合に適しています。

Pimpl の実装

.cpp ファイルの impl のクラスを定義します。

// my_class.cpp
class my_class::impl {  // defined privately here
  // ... all private data and functions: all of these
  //     can now change without recompiling callers ...
};
my_class::my_class(): pimpl( new impl )
{
  // ... set impl values ... 
}

ベスト プラクティス

非スロー スワップの特殊化のサポートを追加するかどうかを検討します。

参照

その他の技術情報

C++ へようこそ (Modern C++)

C++ 言語リファレンス

C++ の標準ライブラリの参照