C ++ 11には同等のものがありboost::intrusive_ptr
ますか?
私の問題は、C++コード上にCスタイルのインターフェイスがあることです。インターフェイスの両側でC++を使用できますが、互換性の理由からCインターフェイスを公開する必要があります。std::shared_ptr
2つ(またはそれ以上)のスマートポインタを介してオブジェクトを管理する必要があるため、使用できません。のような解決策を見つけることができませんboost::intrusive_ptr
。
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
オブジェクトの管理に完全に責任があることを期待しています。別のスマートポインタタイプは、「強い」refcountのみを管理し、「弱い」refcountは管理しない場合があります。これにより、カウントが同期しなくなり、の不変条件が破られshared_ptr
ます。
注:を使用make_shared
すると、侵入型ポインターshared_ptr
とほぼ同じくらい効率的になります。オブジェクトと参照カウント情報は、make_shared
使用時に1つのメモリチャンクに割り当てることができますが、2つの参照カウント(「強い」カウントと「弱い」カウントの場合)は引き続き存在します。これは、侵入型ポインタの場合には当てはまりません。をサポートしていませんweak_ptr
。また、shared_ptr
オブジェクト自体は常に2つのポインター(によって返されるshared_ptr::get()
ポインターと、参照カウントを含み、所有オブジェクトの動的タイプを知っている「制御ブロック」への別のポインター)を格納する必要があるため、侵入型ポインタ。