問題タブ [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++ - クラス内の引数としてスマート ポインターを渡す: scoped_ptr または shared_ptr?
1 つのパブリック メソッド内にオブジェクトを作成するクラスがあります。オブジェクトは非公開で、クラスのユーザーには表示されません。次に、このメソッドは同じクラス内の他のプライベートメソッドを呼び出し、作成されたオブジェクトをパラメーターとして渡します。
この場合の正しいスマート ポインターは scoped_ptr になると思いますが、scoped_ptr をそのように使用するとクラスがコピー不可になるため、これを行うことはできません。メソッドを次のように作成する必要があります。
privateMethod1 はオブジェクトを保存せず、その参照も保持しません。クラスFooからデータを取得するだけです。
正しい方法は、おそらくスマート ポインターをまったく使用せず、オブジェクトをスタックに割り当てることですが、スタック上のオブジェクトを許可しないライブラリを使用するため、それは不可能です。オブジェクトはヒープ上にある必要があります。
結局のところ、scoped_ptr の実際の使用法についてはまだ混乱しています。
c++ - 親と派生の両方の enable_shared_from_this の方法
単純な基本クラスと派生クラスがあり、両方に必要shared_from_this()
です。
この簡単な解決策:
tr1::bad_weak_ptr
次のコードで例外が発生します。
したがって、「グーグル」の後、次の解決策が見つかりました。
そして今、それは機能します。
enable_shared_from_this
親と子の両方にとって、より便利で正しい方法はありますか?
ありがとう
c++ - 多数の sp_counted_impl_p オブジェクト
アプリケーション内に各タイプのオブジェクトがいくつあるかについて、割り当てプロファイリングを実行しました。私は boost::shared_ptr を広範囲に使用しています。
多数の sp_counted_impl_p オブジェクトが割り当てられており、それぞれが 16 バイトを占めていることがわかりました。shared_ptr ごとに期待できる sp_counted_impl_p オブジェクトの数は? 誰かがアイデアを持っていますか?
c++ - 参照カウントスマートポインターの参照カウントはどのように機能しますか?
言い換えれば、実装はどのようにカウントを追跡するのでしょうか?
shared_ptr
キーがポインタのアドレスで、値が参照の数であるすべてのインスタンスからアクセスできる、マップのようなオブジェクトが維持されていますか? を実装する必要がある場合shared_ptr
、これが最初に頭に浮かんだアイデアです。
これらの参照カウント スマート ポインターの場合、メモリ リークの可能性はありますか? もしそうなら、どうすればそれらを避けることができますか?
c - Cのスマートポインタ/安全なメモリ管理?
私と他の多くの人は、RAII などを使用して、C++ で安全でないメモリ操作をラップするためにスマート ポインターを使用して大きな成功を収めたと思います。ただし、デストラクタ、クラス、演算子のオーバーロードなどがある場合は、メモリ管理をラップする方が簡単に実装できます。
生のC99で書いている人にとって、安全なメモリ管理を支援するためにどこを指摘できますか?
ありがとう。
c++ - C++ でターゲットが破棄されたときに自動的に null になるスマート ポインターはありますか
QPointerを見つけました。他にもありますか?
c++ - スマート ポインターは、ラップしているオブジェクトへの関数呼び出しを選択的に非表示またはリダイレクトできますか?
特定のオブジェクトが参照されるプロジェクトに取り組んでいます。これは、COM と非常によく似た設定です。とにかく、私たちのプロジェクトには、これらのオブジェクトに対して Add() と Release() を明示的に呼び出す必要性を軽減するスマート ポインターがあります。問題は、開発者がまだスマート ポインターを使用して Release() を呼び出している場合があることです。
私が探しているのは、スマート ポインターから Release() を呼び出すと、コンパイル時または実行時エラーが発生する方法です。コンパイル時間は私には不可能のようです。ランタイム ソリューション (以下のコードを参照) があると思っていましたが、コンパイルもうまくいきません。どうやら、operator->() を使用した後の暗黙的な変換は許可されていません。
とにかく、私が達成しようとしていることを達成する方法を誰かが考えられますか?
助けてくれて本当にありがとうございます!
ケビン
c++ - スマート ポインターを返すときのベスト プラクティス
boost::shared_ptr などのスマート ポインターを返すときのベスト プラクティスは何ですか? 標準でスマート ポインターまたは基になる生のポインターを返す必要がありますか? 私は C# 出身なので、常にスマート ポインターを返す傾向があります。このように (短いコードの const-correctness をスキップします):
ただし、生のポインターを返し、生のポインターをベクトルに入れる経験豊富なコーダーを見てきました。それを行う正しい方法は何ですか?
c++ - C++で親への弱いポインタを維持するには?
C ++の子オブジェクトで親への弱いポインタ(共有ポインタを使用して作成される)を維持する標準的な方法はありますか?
基本的に、次の行に何かを実装する必要があります。
上記のクラス B のすべてのインスタンスは、親 (クラス A のオブジェクト) への弱いポインタを保持する必要があります。クラス A オブジェクトは、shared_ptr を使用してインスタンス化されます。null デリーターを使用するソリューションを考えることができます。しかし、それはこのようなことを行う標準的な方法ですか?
c++ - 共変仮想関数とスマートポインター
C ++では、戻り型が元の戻り型のサブクラスである限り、サブクラスは仮想関数をオーバーライドするときに別の戻り型を指定できます(両方ともポインター/参照として返されます)。
この機能をスマートポインターにも拡張することは可能ですか?(スマートポインタがいくつかのテンプレートクラスであると仮定します)
説明する:
編集:コンラッド・ルドルフが示唆したように、これは直接可能ではありません。しかし、私はこの方法に出くわしました:
このように行くことを提案しますか?