問題タブ [raii]
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++ - DuplicateHandle の価格
Windows レジストリである C API に便利なオブジェクト指向フロントエンドを提供するクラス ライブラリを作成しています。ただし、クラスがコピーされたHREG
場合など、 sを処理するための最善の方法は何ですか。key
どちらでもいい
- ヒープ整数を割り当て、それを参照カウントとして使用します。ハンドルで RegCloseKey() を呼び出し、参照カウントが 0 のときに整数の割り当てを解除します。
- ハンドルの組み込み機能を使用し、参照カウントを維持するのではなく
DuplicateHandle()
、レジストリ キー オブジェクトがコピーされるときに HREG を呼び出します。次に、常にデストラクタで RegCloseKey を呼び出します。
設計ははるかに単純ですが、そのDuplicateHandle()
ように設計するとアプリケーションのパフォーマンスが大幅に低下するのではないかと懸念しています。私のアプリケーションは何十万ものキーを再帰するため、このオブジェクトをコピーする速度はデリケートな問題です。
DuplicateHandle()
関数固有のオーバーヘッドは何ですか?
c# - RAII は C# で安全に使用できますか? そして、他のガベージコレクション言語は?
System.Windows.Form コントロールを取り込んでカーソルを設定する RAII クラスを作成していました。そしてデストラクタでは、カーソルを元の状態に戻します。
しかし、これは悪い考えですか?このクラスのオブジェクトがスコープ外になったときにデストラクタが呼び出されることを安全に信頼できますか?
c++ - オブジェクトの共有所有権は悪い設計の兆候ですか?
背景: Stroustrup 博士の論文と FAQ を読んでいると、伝説的な CS 科学者およびプログラマーからの強力な「意見」と素晴らしいアドバイスに気づきました。そのうちの 1 つはshared_ptr
C++0x に関するものです。彼はshared_ptr
、それが指し示したオブジェクトの共有所有権について、またそれがどのように表されているかを説明し始めます。最後の行で、彼は言い、私は引用します:
. Aは所有権の
shared_ptr
共有を表しますが、所有権の共有は私の理想ではありません。オブジェクトに明確な所有者と、明確で予測可能な寿命がある方がよいのです。
私の質問: RAII はガベージ コレクションのような他のデザイン パターンをどの程度置き換えますか? システム内の共有所有権を表すために手動のメモリ管理が使用されていないと仮定しています。
c++ - C++ で RAII コードと非 RAII コードを一緒に使用する際の問題を解決するには?
3 つの異なるライブラリがあり、それぞれが異なる開発者によって開発されており、それぞれが (おそらく) 適切に設計されています。しかし、一部のライブラリは RAII を使用しており、一部は使用していないため、一部のライブラリは動的にロードされ、他のライブラリはそうでないため、機能しません。
それぞれの開発者は、自分のしていることは正しいと言っています。この場合のためだけに方法論を変更すれば (たとえば、B で RAII シングルトンを作成するなど)、問題は解決しますが、醜いパッチのように見えます。
この問題をどのように解決することをお勧めしますか?
問題を理解するには、コードを参照してください。
私のコード:
「A」コード(私のDllに静的にリンクされた別のDll内):
「B」コード (A から動的にロードされる別の Dll 内):
java - JavaでRAIIは可能ですか?
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
このデザインパターンはJavaで可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?
ありがとう!
c++ - 安全でないポインター算術演算を持たない RAII + Ref カウントを使用する言語はありますか?
RAII = リソース取得は初期化です
Ref Counting = "貧乏人の GC"
一緒にすると、それらは非常に強力です (デストラクタが呼び出されたときに解放をスローする、VBO を保持する参照カウントされた 3D オブジェクトのように)。
さて、質問は -- RAII は C++ 以外のどの言語にも存在しますか? 特に、ポインター演算/バッファー オーバーフローを許可しない言語はありますか?
c++ - C++ デストラクタは、ブロックの最後まで呼び出されないことが保証されていますか?
以下の C++ コードでは、 // More コードの実行後に ~obj() デストラクタが呼び出されることが保証されていますか? または、obj オブジェクトが使用されていないことを検出した場合、コンパイラは obj オブジェクトを以前に破棄できますか?
この手法を使用して、ブロックの最後にフラグをリセットすることを忘れないようにしたいのですが、ブロック全体でフラグを設定したままにする必要があります。
lisp - スキームのRAII?
Resource Acquisation is Initialization in Scheme を実装する方法はありますか?
RAII が GC-ed 言語ではうまく機能しないことはわかっています (オブジェクトがいつ破棄されるかがわからないため)。しかし、Scheme には、継続、動的風、クロージャーなどの優れた機能があります。これを組み合わせて RAII を実装する方法はありますか?
そうでない場合、スキーム作成者は RAII を使用しないようにコードをどのように設計しますか?
[私が遭遇する一般的な例は次のとおりです。
3D メッシュがあり、頂点バッファ オブジェクトがアタッチされています。メッシュが使用されなくなったら、VBO を解放します。]
ありがとう!
c# - 例外安全性のために「スコープされた動作」を取得する手段としてIDisposableを使用し、「使用する」ことは悪用されますか?
私がC++でよく使用したのは、コンストラクタとデストラクタを介して、A
クラスに別のクラスの状態の開始と終了の条件を処理させ、そのスコープ内の何かが例外をスローした場合に、Bが既知の状態になるようにすることでした。スコープが終了しました。頭字語に関しては、これは純粋なRAIIではありませんが、それでも確立されたパターンです。B
A
C#では、私はよくやりたいです
このようにする必要があります
Frobble
戻ったときの状態を保証したい場合FiddleTheFrobble
。コードはより良いでしょう
おおよそのようにFrobbleJanitor
見えるところ
そしてそれが私がやりたい方法です。私が使用したいのは、で使用する必要があるため、現実は追いつきます。これはコードレビューの問題と考えることができますが、何かが私を悩ませています。FrobbleJanitor
using
質問:using
上記はとの乱用と見なされIDisposable
ますか?