C++ 11にはboost::intrusive_ptr
と同等のものはありますか?
私の問題は、C++コードにCスタイルのインターフェースがあることです。インターフェイスの両側でC++を使用できますが、互換性の理由からCインターフェイスを公開する必要があります。 std::shared_ptr
を使用できません。2つ(またはそれ以上)のスマートポインターを使用してオブジェクトを管理する必要があるためです。 boost::intrusive_ptr
などの解決策を理解できません。
C++ 11にはboost :: intrusive_ptrと同等の機能がありますか?
番号。
_std::make_shared
_はあります。つまり、_std::shared_ptr
_はほぼ(以下の注を参照)侵入型スマートポインタと同じくらい効率的です。これは、参照カウントがオブジェクトに隣接してメモリに保存されるためです。それ自体、参照の局所性とキャッシュの使用を改善します。また、_std::enable_shared_from_this
_を提供します。これにより、_std::shared_ptr
_が所有するオブジェクトへの組み込みポインターのみがある場合に_shared_ptr
_を取得できますが、さまざまなスマートポインタ型を使用するオブジェクト。
_shared_ptr
_は、オブジェクトの管理を完全に担当することを期待しています。別のスマートポインタータイプは、「強い」参照カウントのみを管理し、「弱い」参照カウントは管理しない可能性があります。これにより、カウントが同期しなくなり、_shared_ptr
_の不変式が壊れます。
注:_make_shared
_を使用すると、_shared_ptr
_がほぼになり、侵入ポインタと同じくらい効率的になります。 _make_shared
_を使用すると、オブジェクトと参照カウント情報をメモリの単一のチャンクに割り当てることができますが、(「強い」カウントと「弱い」カウントの)2つの参照カウントはまだありません。侵入ポインタは_weak_ptr
_をサポートしていないため、大文字の場合です。また、_shared_ptr
_オブジェクト自体は常に2つのポインター(shared_ptr::get()
によって返されるポインターと、参照カウントを含み動的型を知っている「制御ブロック」への別のポインター)を保存する必要があります所有オブジェクトの)なので、侵入ポインタよりもフットプリントが大きくなります。