C++26のstd::polymorphicがclone()地獄を終わらせる

Composite objects and C++26 the std:polymorphic type

C++26に追加されるstd::polymorphicは、動的な型を持つメンバーを値として所有するクラスを劇的に単純化する。従来はunique_ptrとvirtualなclone()でコピーを実装する必要があり、派生クラスでのclone()忘れがスライシングを招くなどの問題があった。std::polymorphicは構築時にコピー操作を型消去して保持するため、Rule of Zeroのままコピー可能で、constも伝播し、null状態も存在しない。

std::polymorphicのコピーコンストラクタは、保存された操作を呼び出すだけだ。これはstd::functionやstd::anyが使っているのと同じ手法を、コピーコンストラクタに応用したものだ。

この日のほかの記事

2026-10-21