問題タブ [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++ - ブーストのshared_ptr(shared_ptrとはconst & r, T * p) に使用されますか?
boost::shared_ptr
異常なコンストラクターがあります
これが何に役立つのか、私は少し困惑しています。基本的に と所有権を共有しますr
が、.get()
を返しp
ます。じゃない r.get()
!
これは、次のようなことができることを意味します。
そして、あなたはこれを得るでしょう:
ポインタは別々ですが、どちらも ause_count
が 2 であると主張していることに注意してください (同じオブジェクトの所有権を共有しているため)。
したがって、int
所有者はまたはx
が存在する限り存在します。ドキュメントが正しいことを理解していれば、2番目のドキュメントは決して破壊されません。次のテストプログラムでこれを確認しました。x
y
int
これは(予想どおり)出力します:
では、あるポインターの所有権を共有するが、使用すると別のポインター (所有していない) のように機能する、この異常な構造の有用性は何ですか。
c++ - C ++とスマートポインター-この状況でスマートポインターはどのように役立ちますか?
残念なことに、実際の開発でスマートポインターを使用する機会はありませんでした(監督者はそれが「複雑」で時間の無駄だと考えています)。しかし、私はそれらを自分のものに使用することを計画しました...
モジュールが完了した後、または新しいデータがロードされたときに、モジュールの初期化を解除する状況があります。ポインターを使用していると、コードに次のようなnullのチェックが散らばっています...
生のポインターの代わりにスマートポインターを使用する場合、この問題をどのように軽減できますか?
c++ - Qtのスマートポインタ
ここに書かれているように、これまでのQtには8つの特定のスマートポインタクラスがあります。必要なのはそれだけのようです。ただし、これらのスマートポインターのいずれかを使用するには、クラスをQObjectから派生させる必要がありますが、これは必ずしも便利ではありません。Qtには、任意のクラスで機能するスマートポインターの他の実装がありますか?
c++ - C++ 初期化リストとメモリ割り当て
以下は有効ですか?
ctorで指定した順序で初期化が正確に行われると仮定するのは正しいですか? そうでない場合、m_pData の初期化の後に m_nDataLength の初期化が行われるとどうなりますか?
c++ - スマート ポインターでスライスが発生する可能性はありますか?
スライスを正しく理解していれば、ポインターやスマートポインターでこれが発生する可能性はないと思います。たとえば、次の場合:
私の理解では、「b」が指すオブジェクトに割り当てられたメモリのブロックは依然として同じであり、スマートポインター「a」に割り当てられても変更されません。
私の理解を確認または拒否するか、これに関連する落とし穴があればお知らせください。
c++ - shared_ptrとscoped_ptr
scoped_ptr
はコピーできず、スコープ外で削除されています。だからそれは一種の制限されていshared_ptr
ます。したがって、本当にコピー操作を制限する必要がある場合以外に、shared_ptr
使用する方がよいようです。オブジェクトのコピーを作成する必要があるかどうかわからない場合があるためです。したがって、問題は次のとおりです。上記の場合に加えて、のshared_ptr
代わりに使用する方が良い(または推奨される)と考えられますかscoped_ptr
。scoped_ptr
からはるかに高速に動作しますかshared_ptr
、それとも何か利点がありますか?
ありがとう!
c++ - 実行時にテンプレートを条件付きでインスタンス化します
テンプレートクラスがあります
ここで、メインコードで、条件に応じてテンプレートクラスをインスタンス化します。好き :
このアプローチの問題はauto_ptr<>
、の終わりにが死ぬことですswitch{}
。また、事前にインスタンス化される型がわからないため、関数の最初で宣言することはできません。
コンパイル時に(テンプレートを使用して)実行時のことを達成しようとしていることは知っていますが、それでもこれを行うためのより良い方法があるかどうかを知りたいと思っていました。
c++ - shared_ptrでメモリリークを回避するには?
次のコードを検討してください。
出力はありません。デストラクタは呼び出されません。メモリーリーク。私は常に、スマート ポインターがメモリ リークの回避に役立つと信じてきました。
クラス内で相互参照が必要な場合はどうすればよいですか?
c++ - C ++ SmartPointersは自己割り当てでリークしますか?
スマートポインタクラスが自己評価でリークしている理由を理解するのに小さな問題があります。私がこのようなことをしたら
私の同僚は、私のスマートポインターがリークしていると私に言いました。何が起こっているのかを追跡するためにスマートポインターにいくつかのログメッセージとテストを追加し、これを報告しました:
なぜ彼らが私のスマートポインタがリークしていると考えるのか理解できません...何かアイデアはありますか?前もって感謝します!