問題タブ [scoped-ptr]
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++ - malloc および free を使用した shared_ptr
私はcとcppを含む大規模なアプリケーションで作業しています。すべてのファイルは cpp 拡張子として保存されますが、コードは c-style で記述されています。つまり、malloc と realloc と calloc を介してメモリを割り当てるクラスではなく、構造を定義するということです。最近、boost ライブラリがインストールされたので、既存のコード ベースに使用する予定です。
- std::shared_ptr を malloc と free で使用できますか。
- はいの場合、サンプルコードベースを教えてもらえますか?
- アプリケーションで std::shared_ptr を作成し、このポインタを malloc または calloc を使用する別の関数に渡すと、機能に影響がありますか?
または言い換えれば:
次のコードで、std::shared_ptr を使用して同様の機能を実現するにはどうすればよいですか。
ダブルポインターを受け入れ、アプリケーション内の構造体を埋め、malloc を使用するいくつかの関数を呼び出します。これらのポインタを std::shared_ptr に割り当てることはできますか? 例えば:
c++ - C++ Boost ライブラリ - 共有ポインタを関数に渡す
共有ポインタを次のように作成できると仮定します
ptr が指すメモリを割り当てる共有ポインタを渡す必要があります。このようなもの。
shared_ptr
上記のコードに示すように 、どうすれば同様の機能を実現できますか。
c++ - scoped_ptrで例外が発生した場合にデストラクタが呼び出されない
c++ブーストライブラリを使い始めたばかりです。私は多くの場所で、scoped_ptrを使用すると、例外が発生した場合でもオブジェクトが常に破棄されることを読みました。
次のコードで試してみました。
Bのデストラクタへの呼び出しはありません。しかし、scoped_ptrを使用したので、Bのデストラクタを呼び出す必要があったか、scoped_ptrの使用を誤って解釈しました。
しかし、それをtry catchで囲むと、Bのデストラクタが呼び出されます。
この場合、tryブロックで例外が発生した場合に、ローカルに割り当てられたすべてのオブジェクトがスタックから削除され、scoped_ptrのオブジェクトが内部にラップされているため、スコープオブジェクトのデストラクタが最終的にポインタを破棄すると、Aのデストラクタが呼び出されます。 。割り当てられたメモリを明示的に削除する必要がないか、scoped_ptrの説明を誤って解釈したため、scoped_ptrは便利です。
scoped_ptrを使用して例外が発生した場合に、クラスBのデストラクタを呼び出すにはどうすればよいですか。
c++ - スマート ポインターにベース ポインターへの変換演算子がないのはなぜですか?
次のようなコードを使用していることが多い場合:
さて、スマート ポインターは暗黙の変換演算子を簡単に定義して「生の」ポインター型に戻すことができると思います。これにより、このコードを引き続き有効にすることができ、古いコードの「スマート化」が容易になります。
しかし、そうではありません - または少なくとも、私が見つけたものではありません。なんで?
c++ - 最上位で scoped_ptr よりも shared_ptr を使用する利点はありますか?
私のチームでは、特定のコンテキストでのポインター コンテナーの使用について意見の相違があります。考えてください:
(実際には存在しない特別なプリプロセッサ コードがここにあることを理解していただければ幸いです。
私たちが現在持っているコードは状態 "1b" (shared_ptr メンバー、裸の ptr を渡す) にありますが、これはあるべき姿ではないと考えています。一見しただけで、最も自然で合理的で安全な行動と正当化がどのようなものであるかを知りたいと思います。または、誰かが「3」または「d」を提案したい場合. 私自身も意見はありますが、まだ共有したくありません。
c++ - ブースト侵入ポインターで配列を初期化する最も STLish な方法
私はこれを持っています:
配列を初期化する最もクリーンな STLish 方法は何ですか。コードはパフォーマンスに敏感であり、ベクターの使用はオプションではないことに注意してください。