問題タブ [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.

0 投票する
2 に答える
597 参照

c++ - DuplicateHandle の価格

Windows レジストリである C API に便利なオブジェクト指向フロントエンドを提供するクラス ライブラリを作成しています。ただし、クラスがコピーされたHREG場合など、 sを処理するための最善の方法は何ですか。key

どちらでもいい

  1. ヒープ整数を割り当て、それを参照カウントとして使用します。ハンドルで RegCloseKey() を呼び出し、参照カウントが 0 のときに整数の割り当てを解除します。
  2. ハンドルの組み込み機能を使用し、参照カウントを維持するのではなくDuplicateHandle()、レジストリ キー オブジェクトがコピーされるときに HREG を呼び出します。次に、常にデストラクタで RegCloseKey を呼び出します。

設計ははるかに単純ですが、そのDuplicateHandle()ように設計するとアプリケーションのパフォーマンスが大幅に低下するのではないかと懸念しています。私のアプリケーションは何十万ものキーを再帰するため、このオブジェクトをコピーする速度はデリケートな問題です。

DuplicateHandle()関数固有のオーバーヘッドは何ですか?

0 投票する
4 に答える
2122 参照

c# - RAII は C# で安全に使用できますか? そして、他のガベージコレクション言語は?

System.Windows.Form コントロールを取り込んでカーソルを設定する RAII クラスを作成していました。そしてデストラクタでは、カーソルを元の状態に戻します。

しかし、これは悪い考えですか?このクラスのオブジェクトがスコープ外になったときにデストラクタが呼び出されることを安全に信頼できますか?

0 投票する
4 に答える
1401 参照

c++ - オブジェクトの共有所有権は悪い設計の兆候ですか?

背景: Stroustrup 博士の論文と FAQ を読んでいると、伝説的な CS 科学者およびプログラマーからの強力な「意見」と素晴らしいアドバイスに気づきました。そのうちの 1 つはshared_ptrC++0x に関するものです。彼はshared_ptr、それが指し示したオブジェクトの共有所有権について、またそれがどのように表されているかを説明し始めます。最後の行で、彼は言い、私は引用します

. Aは所有権のshared_ptr共有を表しますが、所有権の共有は私の理想ではありません。オブジェクトに明確な所有者と、明確で予測可能な寿命がある方がよいのです。

私の質問: RAII はガベージ コレクションのような他のデザイン パターンをどの程度置き換えますか? システム内の共有所有権を表すために手動のメモリ管理が使用されていないと仮定しています。

0 投票する
5 に答える
672 参照

c++ - C++ で RAII コードと非 RAII コードを一緒に使用する際の問題を解決するには?

3 つの異なるライブラリがあり、それぞれが異なる開発者によって開発されており、それぞれが (おそらく) 適切に設計されています。しかし、一部のライブラリは RAII を使用しており、一部は使用していないため、一部のライブラリは動的にロードされ、他のライブラリはそうでないため、機能しません。

それぞれの開発者は、自分のしていることは正しいと言っています。この場合のためだけに方法論を変更すれば (たとえば、B で RAII シングルトンを作成するなど)、問題は解決しますが、醜いパッチのように見えます。

この問題をどのように解決することをお勧めしますか?

問題を理解するには、コードを参照してください。


私のコード:


「A」コード(私のDllに静的にリンクされた別のDll内):


「B」コード (A から動的にロードされる別の Dll 内):

0 投票する
2 に答える
423 参照

java - JavaでRAIIは可能ですか?

http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization

このデザインパターンはJavaで可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?

ありがとう!

0 投票する
6 に答える
579 参照

c++ - 安全でないポインター算術演算を持たない RAII + Ref カウントを使用する言語はありますか?

RAII = リソース取得は初期化です

Ref Counting = "貧乏人の GC"

一緒にすると、それらは非常に強力です (デストラクタが呼び出されたときに解放をスローする、VBO を保持する参照カウントされた 3D オブジェクトのように)。

さて、質問は -- RAII は C++ 以外のどの言語にも存在しますか? 特に、ポインター演算/バッファー オーバーフローを許可しない言語はありますか?

0 投票する
8 に答える
8726 参照

c++ - C++ デストラクタは、ブロックの最後まで呼び出されないことが保証されていますか?

以下の C++ コードでは、 // More コードの実行に ~obj() デストラクタが呼び出されることが保証されていますか? または、obj オブジェクトが使用されていないことを検出した場合、コンパイラは obj オブジェクトを以前に破棄できますか?

この手法を使用して、ブロックの最後にフラグをリセットすることを忘れないようにしたいのですが、ブロック全体でフラグを設定したままにする必要があります。

0 投票する
1 に答える
746 参照

lisp - スキームのRAII?

Resource Acquisation is Initialization in Scheme を実装する方法はありますか?

RAII が GC-ed 言語ではうまく機能しないことはわかっています (オブジェクトがいつ破棄されるかがわからないため)。しかし、Scheme には、継続、動的風、クロージャーなどの優れた機能があります。これを組み合わせて RAII を実装する方法はありますか?

そうでない場合、スキーム作成者は RAII を使用しないようにコードをどのように設計しますか?

[私が遭遇する一般的な例は次のとおりです。

3D メッシュがあり、頂点バッファ オブジェクトがアタッチされています。メッシュが使用されなくなったら、VBO を解放します。]

ありがとう!

0 投票する
12 に答える
6868 参照

c# - 例外安全性のために「スコープされた動作」を取得する手段としてIDisposableを使用し、「使用する」ことは悪用されますか?

私がC++でよく使用したのは、コンストラクタとデストラクタを介して、Aクラスに別のクラスの状態の開始と終了の条件を処理させ、そのスコープ内の何かが例外をスローした場合に、Bが既知の状態になるようにすることでした。スコープが終了しました。頭字語に関しては、これは純粋なRAIIではありませんが、それでも確立されたパターンです。BA

C#では、私はよくやりたいです

このようにする必要があります

Frobble戻ったときの状態を保証したい場合FiddleTheFrobble。コードはより良いでしょう

おおよそのようにFrobbleJanitor見えるところ

そしてそれが私がやりたい方法です。私が使用したいのは、で使用する必要あるため、現実は追いつきます。これはコードレビューの問題と考えることができますが、何かが私を悩ませています。FrobbleJanitor using

質問:using上記はとの乱用と見なされIDisposableますか?