std::unique_ptr
C では、標準ライブラリの特定のテンプレートはインスタンス化に完全な型を必要とします。ただし、std::shared_ptr と std::unique_ptr は部分的な例外であり、特定のメンバーに対して不完全な型でのインスタンス化が許可されます。
部分例外の背後にある理由:
未定義を回避するには生のポインター、std::shared_ptr、およびを使用して不完全な型を削除することで発生する可能性のある動作std::unique_ptr は、特定のインスタンスで不完全な型を許可します。これにより、リスクを最小限に抑えながら、PIMPL でスマート ポインターを使用するようなイディオムが可能になります。
不完全型の Unique_ptr 要件:
shared_ptr とは異なり、unique_ptr はより制限された容量で完全な型を必要とします。 ~P()、reset()、および移動代入演算子=() が次の場合
不完全型の Shared_ptr 要件:
Shared_ptr は、デフォルト コンストラクター P()、コピー コンストラクター P(const P&) で使用される場合、不完全型でインスタンス化できます。 、コンストラクター P(P&&) を移動します。ただし、reset() や move assign =() などの操作には完全な型が必要です。
結論:
unique_ptr とshared_ptr は両方とも不完全な型の部分的なサポートを提供しますが、要件は異なります。未定義の動作を回避し、効率的に使用するには、これらの要件を理解することが不可欠です。前方宣言に関連するエラーの場合は、実装固有の動作の可能性を考慮する価値があります。
以上が`std::unique_ptr` は不完全な型で使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。