ホームページ >バックエンド開発 >C++ >どのような C スマート ポインター実装が存在し、それらはどのように異なるのでしょうか?

どのような C スマート ポインター実装が存在し、それらはどのように異なるのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-28 01:51:14227ブラウズ

What C   Smart Pointer Implementations Exist, and How Do They Differ?

どの C スマート ポインター実装が存在し、どのように比較しますか?

C では、スマート ポインターはラッパー クラスです。動的に割り当てられたオブジェクトの有効期間を管理し、不要になったときに自動的にメモリの割り当てを解除します。スマート ポインターのさまざまな実装が利用可能ですが、それぞれに独自の長所と短所があります。

C 03 実装

  • std::auto_ptr: 指定されたオブジェクトを所有するが、コピーしたり使用したりすることはできない限定的なガベージ コレクション機能STLコンテナ内。これは C 標準では非推奨です。
  • std::auto_ptr_ref: 特定の状況でコピーと代入を可能にするために std::auto_ptr とともに使用される設計の詳細。

C 11実装

  • std::unique_ptr: std::auto_ptr を置き換え、配列処理、左辺値保護、および STL 互換性に関する重要な改善が行われます。ポインタの排他的所有権を付与します。
  • std::shared_ptr: 動的に割り当てられたオブジェクトの周囲に参照カウントされたスマート ポインタをラップし、共有所有権を許可します。スレッド セーフをサポートし、不完全な型を処理します。
  • std::weak_ptr: std::shared_ptr を持つオブジェクトへの非所有参照。オブジェクトの削除は妨げられませんが、有効な場合は std::shared_ptr を取得できます。循環参照カウントを回避するために使用されます。

Boost 実装

  • boost::shared_ptr: 参照-カウントスマートポインターは、その理由により広く使用されていますversatility.
  • boost::weak_ptr: C 11 の対応物と同様の、boost::shared_ptr への非所有参照。
  • boost:: scoped_ptr: コピー セマンティクスを持たない軽量のスマート ポインター。 std::unique_ptr.
  • boost::intrusive_ptr: カスタマイズされた参照カウントとスレッド セーフを備えたカスタム スマート ポインター互換クラスを作成するために設計されています。
  • boost:: shared_array: 配列の boost::shared_ptr は、次のような配列操作機能を提供します。 Operator[] と delete[]。
  • boost::scoped_array: 配列の boost::scoped_ptr で、配列機能が組み込まれていますが、コピーできません。

Qt 実装

  • QPointer: QObject および派生クラス用の「弱い」スマート ポインター。アクセスする前にオブジェクトの有効性をチェックしますが、マルチスレッド環境では制限があります。
  • QSharedDataPointer: 参照カウントの実装を必要とするが、そうではない「強力な」スマート ポインターatomic.
  • QExplicitlySharedDataPointer: QSharedDataPointer に似ていますが、ポイント先のオブジェクトをいつデタッチするかを制御できます。
  • QSharedPointer: アトミック参照- スレッド セーフ、カスタム削除、および互換性を備えたカウント スマート ポインターboost::shared_ptr.
  • QWeakPointer: std::weak_ptr.
  • QScopedPointer: に類似した QSharedPointer への非所有参照boost::scoped_ptr 上で、単一所有者のスマート ポインタを提供します。例外的な安全性と互換性。

以上がどのような C スマート ポインター実装が存在し、それらはどのように異なるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。