問題タブ [smart-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::setから削除します>T*による
私は共有ポインタのセットを持っています:
そしてポインタ:
に等しい要素を効率的に削除したいのですが、はとはまったく異なるタイプであるため、セットのメンバーや標準アルゴリズムのいずれでもこれを行うことはできません。set
p
T*
boost::shared_ptr<T>
私が考えることができるいくつかのアプローチは次のとおりです。
- どういうわけか、ポイントされたメモリの所有権を取得しないポインタから新しいshared_ptrを構築します(理想的な解決策ですが、これを行う方法がわかりません)
- 上記を実行できるように、shared_ptrをラッピング/再実装します
- セットに対して独自のバイナリ検索を実行するだけです
c++ - std::auto_ptr<>::operator = 既存の指示対象をリセット/割り当て解除する必要がありますか?
ここで std::auto_ptr<>::operator= について読みました
ただし、左側のオブジェクトが既に何らかのオブジェクトを指している場合、そのオブジェクトの割り当ては自動的に解除されないことに注意してください。これを明示的に行うには、新しい値を割り当てる前にメンバー関数 reset を呼び出します。
しかし、ヘッダーファイルのソースコードを読むとC:\Program Files\Microsoft Visual Studio 8\VC\ce\include\memory
正しい/標準的な動作は何ですか? 他の STL 実装はどのように動作しますか? 上記の Web サイトに間違った情報や古い情報が含まれている場合、参考としてどの Web サイトをお勧めしますか?
c++ - boost::pythonでboost::scoped_ptrを公開する
scoped_ptr
のコピーコンストラクターが次のコードスニペットでプライベートであるというコンパイルエラーが発生します。
ただし、この例はshared_ptrで機能します。誰かが答えを知っていれば、それは素晴らしいことです。ありがとう
c++ - スマートポインター-生のポインターを置き換えることができない場合
こんにちは、
スマートポインタに関するこのクエリがあります。
友人の一人から、スマートポインターはほとんどの場合生のポインターを置き換えることができると聞きました。しかし、私が彼にスマートポインターが生のポインターを置き換えることができない他のケースは何であるかを尋ねたとき、私は彼から答えを得ませんでした。
誰かが生のポインタをいつどこで置き換えることができないか教えてもらえますか?
c++ - リストからboost::shared_ptrを削除する正しい方法は何ですか?
std::list
of がありboost::shared_ptr<T>
、そこから項目を削除したいのですが、リスト内の項目の 1 つに一致する T* 型のポインターしかありません。
ただしmyList.remove( tPtr )
、shared_ptr は==
テンプレート引数の型を実装していないため、使用できません。
私がすぐに考えたのは、どちらが構文的に正しいかを試すことでしたが、一時的に別の use_count があるmyList.remove( shared_ptr<T>(tPtr) )
ため、二重削除からクラッシュします。shared_ptr
残っている唯一のオプションは、カスタム比較で std::find を使用するか、リストの総当たりをループして自分で見つけることですが、もっと良い方法があるはずです。
明らかな何かが欠けていますか、それともこれは非標準的な使用法であり、クリーン/通常の方法で削除することはできませんか?
c++ - 多形キュー
ポリモーフィックキューを実装しようとしています。これが私の裁判です:
残念ながら、2番目のコメントで述べた理由により、このコードでPolymorphic Queueを機能させることができませんでした。おそらく、スマートポインターを使用する必要がありますが、どうすればよいでしょうか。私は自分のコードの改善やポリモーフィックキューの新しい実装を受け入れています。
ありがとう。
c++ - C++ スマート ポインター: ポインターの共有とデータの共有
この洞察に満ちた記事では、Qt プログラマーの 1 人が、Qt が実装するさまざまな種類のスマート ポインターについて説明しようとしています。最初に、彼はデータの共有とポインター自体の共有を区別しています。
まず、1 つはっきりさせておきます。ポインターの共有とデータの共有には違いがあります。ポインターを共有すると、ポインターの値とその有効期間はスマート ポインター クラスによって保護されます。つまり、ポインタは不変です。ただし、ポインターが指しているオブジェクトは、完全に制御できません。オブジェクトがコピー可能かどうか、代入可能かどうかはわかりません。
現在、データの共有には、共有されているデータについて何かを知っているスマート ポインター クラスが含まれます。実際、要点は、データが共有されているということであり、その方法は気にしません。データを共有するためにポインターが使用されているという事実は、この時点では関係ありません。たとえば、Qt ツール クラスがどのように暗黙的に共有されているかはあまり気にしませんか? あなたにとって重要なのは、それらが共有されていること (したがって、メモリ消費を削減すること) と、共有されていないかのように機能することです。
率直に言って、私はこの説明を理解していません。記事のコメントに明確化の嘆願がありましたが、著者の説明が十分であるとは思いませんでした.
このことを理解できるなら、説明してください。この違いは何ですか? また、他の共有ポインタ クラス (つまり、boost または新しい C++ 標準から) はどのようにこの分類法に適合しますか?
前もって感謝します
c++ - C ++スマートポインターを上下にキャストする方法
2 つのクライアントがメッセージ層の上で互いに通信する
メッセージ本文に、任意のデータ型を指すフィールドを含める必要があります
クライアント A から、フィールドを としてshared_ptr<TYPEA>
メッセージ レイヤーに送信します。このフィールドをshared_ptr<void>
メッセージ レイヤーの として定義します。shared_ptr<TYPEA>
しかし、このフィールドをクライアント B に戻すにはどうすればよいでしょうか?
shared_ptr<void>
または、メッセージ層で別のものとして定義する必要がありますか?
ありがとう
c++ - COMオブジェクトへのメンバー変数ポインター
COMオブジェクトへのメンバー変数ポインター参照を保持し、C++のクラス全体で参照を再利用することに問題はありますか。
COMオブジェクトを使用するたびに.CreateInstanceを呼び出したい、つまり毎回新しいインスタンスを取得する理由を知っている人はいますか。
あなたがこれをしたい理由がわかりません、
ありがとう、
(いいえ、受け入れられる答えです!!!)
c++ - スマート ポインターとポリモーフィズム
参照カウント ポインター (SP
例で呼び出されます) を実装しましたが、多態性に問題があり、これを行うべきではないと思います。
次のコードでは:
DerivedClass
から継承しBaseClass
ます。通常のポインターではこれでうまくいくはずでしたが、スマート ポインターでは"cannot convert from 'SP<T>' to 'const SP<T>&"
、スマート ポインターのコピー コンストラクターを参照していると思います。
参照カウント ポインターを使用してこの種のポリモーフィズムを許可するにはどうすればよいですか? この問題が発生している場合、コードサンプルが明らかにここで何か間違ったことをしていることに感謝します。
PS:現時点では不可能なので、スマート ポインターで標準ライブラリを使用するように言わないでください。