C++26のstd::indirectがPImplイディオムをどう変えるか

The PImpl idiom and the C++26 std:indirect type

PImpl(Pointer to implementation)は、クラスの実装詳細を別クラスに分離し、不透明なポインタでアクセスすることで、インターフェースと実装を分離し、コンパイル時の依存関係を最小化するテクニックです。本記事では、生のポインタ、std::unique_ptr、そしてC++26で導入されたstd::indirectを使った3つの実装方法を比較します。std::indirectは、動的確保されたメンバを値のように扱うための新しいボキャブラリ型で、constの伝播やnull非許容など、unique_ptrの欠点を解消します。特に、PImplに最適な型として、コードの堅牢性を高める方法を解説します。

std::indirectは、unique_ptrのセマンティクス(コピー不可、constを伝播しない、nullになり得る)が適切でない場合に、その代わりに使うことを意図しています。

この日のほかの記事

2026-07-24