C でさまざまなタイプのポインターを使用する場合
C では、オブジェクトの所有権と有効期間を管理するために、さまざまなタイプのポインターを使用できます。この記事では、共有所有権、一意の所有権、非所有権など、さまざまなシナリオに適切なポインタ タイプを選択するためのガイダンスを提供します。
共有所有権:
- std::shared_ptr: 複数のオブジェクトがリソースの所有権を共有する必要がある場合に使用します。どのオブジェクトが最後に使用されるかは不明です。
-
std::weak_ptr: リソースの有効期間に影響を与えずにリソースを監視するために使用します。 shared_ptrs 間の参照サイクルを中断するためにこれを使用することは避けてください。
Unique Ownership:
-
std::unique_ptr: デフォルト単一のオブジェクトがリソースを所有するスマート ポインターの選択肢。これにより、デリーター テンプレート引数を使用してオブジェクトの削除をカスタマイズできます。
-
boost::intrusive_ptr: リソースがすでに参照カウント管理を提供している場合の軽量オプションです。
いいえ所有権:
-
Raw Pointers (T*): 参照元オブジェクトよりも存続することが知られているリソースへの非所有参照、または null 可能性とリセット可能性のために使用します。
-
参照: 非 null、非所有が推奨されます。リソースへの参照。
追加メモ:
-
std::auto_ptr: C 11 では非推奨。 std::unique_ptr.
-
Boost::shared_array および boost::scoped_array: std::unique_ptr> の代替;定数>
- 同時実行シナリオの場合、リソースの活性度をチェックするときに競合状態を避けるために、expired() を慎重に使用する必要があります:
if(!wptr.expired()) {
// Potential race condition
something_assuming_the_resource_is_still_alive();
}
ログイン後にコピー
以上がどの C ポインタ型を使用すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。