問題タブ [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 投票する
1 に答える
319 参照

java - デストラクタが言語でサポートされていない場合、スタックの巻き戻しにどのように対応するのですか?

Windowクラスのインスタンスを作成したとします。ウィンドウがユーザーに表示されます。次に、例外がスローされ、インスタンスへの参照が失われますが、インスタンスがまだ存在するため、ウィンドウは引き続きユーザーに表示されます (参照されなくなっただけです)。

これらの状況で何をすべきか?

具体的には、Squirrel スクリプト言語 (http://www.squirrel-lang.org/) について話しています。finallyJavaとは逆にブロックやファイナライザメソッドがないようなので、この言語では例外処理が壊れているのでしょうか?

0 投票する
3 に答える
640 参照

stack - D でのスタックベースのオブジェクトのインスタンス化

私は D を学んでいますが、エラーが発生して混乱しています。

次の点を考慮してください。

完全に立派な結果をもたらします:

ここで、マネージド ヒープを使用する代わりにスタックで PerformanceCounter を初期化しようとするとどうなるかを考えてみましょう。

収量:

私は困惑しています。なぜこれが壊れるのかについての考えはありますか?(Mac OS X 10.6.4 では DMD 2.049)。n00bを助けてくれてありがとう。

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

c++ - RAII オブジェクトの構築に失敗した場合

RAII オブジェクトを構築するとします。そのオブジェクトは構築に失敗する可能性があります。どうすればこれを処理できますか?

確かに、のデフォルトのコンストラクターはstd::vectorスローされず、それが役立ちますが、これは一般的なケースではありません。コンストラクターはスローする可能性があります。リソース取得の失敗を処理したい場合、それがスローされない場合でも続行できるようにするにはどうすればよいですか?

編集:明確にするために、私の問題は、リソースの取得に失敗した場合、もう一度やり直したくなるかもしれないということです。代替リソースを取得してみることができるかもしれません。

0 投票する
3 に答える
332 参照

c++ - C++ で "RAII" の方法に従う場合、静的コンストラクターが必要ですか?

RAII ルールに従い、C++ でクラスを開発する場合、静的コンストラクターが必要になりますか? 静的コンストラクターは何らかの形で私を助けてくれますか?それとも間違った手順でしょうか?

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

c++ - テンプレートを介して operator<< を使用するときにオーバーロードが必要なのはなぜですか?

この質問のように、SBRM/RAII を使用してクラス経由でストリーミングすることを実験しているので、

デストラクタでいくつかの追加機能を実行できますが、私のテンプレートの知識は限られているようです。

私が持っているもの(わかりやすくするために単純化)は次のとおりです。

この種の作品:

しかし、私の主な懸念は、(文字列以外の) リテラルを使用するときにコンパイラがテンプレートをオーバーロードする必要があるのはなぜですか?
これを回避するためのトリックはありますか、それとも間違ったアプローチを取っていますか? 私は今マクロを使用することに頼っているので、他の提案は大歓迎です

この問題は gcc 4.1.2 で見られます。および 4.4.3。オーバーロードされた関数がなければ、次のようになります。

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

c++ - オプションの要素は RAII を壊しますか? はいの場合、より良いアプローチは何ですか?

セルの 2 次元マトリックスがあります。通常、これらのセルでは目に見えないアルゴリズムのみが機能します。しかし、各セルを視覚化したい場合があるため、グラフィカル オブジェクトへのポインターを追加しました。

Cell のコンストラクターは、representation_ を 0 に設定します。場合によっては、別の Visualization クラスがマトリックスを反復処理し、各セルの内容を色で視覚化する要素を Cells に追加します。

これは RAII のパラダイムを壊していると思います。より良いアプローチはありますか?

別の 2 次元マトリックスを作成し、そこから元のマトリックスにリンクして、ポインターが視覚化側にあるようにすることもできますが、その場合は 2 つのマトリックスが必要になります。

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

c++ - shared_ptrによって保持されている同じクラスのメソッドにdeleterを渡す方法

クラスStagingConfigDatabaseに似たサードパーティライブラリのクラスがいくつかあります。これらのクラスは、作成後に破棄する必要があります。RAIIにshared_ptrを使用していますが、例に示すように、個別のテンプレートファンクターを使用するのではなく、 1行のコードを使用してshared_ptrを作成したいと考えています。おそらくラムダを使用していますか?またはバインドしますか?

私は次のようなことを考えていました:

しかし、それはコンパイルされません:(

ヘルプ!

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

objective-c - Objective-Cでの参照カウントの警告?

私は長い間、自分自身をガベージ コレクションの俗物だと考えてきました。秘密裏に C++ を愛しているにもかかわらず、選択肢が与えられたときにガベージ コレクションを使用せずに言語を積極的に使用する開発者を冷笑していることに気づきました。

そしてObjective-Cに出会いました。わお!その参照カウントのシステムは見事にシンプルに見えます – 私はエレガントとさえ言えます. OSX 向けに開発する場合、開発者にはおしゃれな GC を使用するオプションが与えられます。iOS 向けに開発する場合、開発者は参照カウントに行き詰まります。

私の質問は:

iOS に移植される可能性のある OSX アプリケーションを開発している場合、Objective-C の参照カウント システムは、アプリケーションの最初のバージョンで無視することを保証するのに十分な (開発およびバグ修正に関して) 時間がかかりますか?

悪魔のように複雑な循環データ構造を構築するほど賢くないと仮定して、参照カウント*に頼ると、どのような問題に遭遇する可能性がありますか? のような機能を使えばautoreleaseすべてがとても簡単に思えますが、もしこれが本当なら、Apple がガベージ コレクタの作成に労力を費やさなかったことを私は知っています。何に気をつければいいですか?

retain* s とsをいじっていても、ガベージ コレクターを使用できることは承知してreleaseいます (それらは無視されます)。ただし、GC 以外のアプリケーションがRAIIretainを使用することが多いことを考えると、世代別 GC がandへの呼び出しを「置き換える」場合、それがどのように機能するかわかりませんrelease。リソースのリリースが遅れる可能性はありませんか?

0 投票する
3 に答える
554 参照

language-agnostic - RAII とガベージ コレクションが相互に排他的であるのはなぜですか?

私は問題の要点を理解していると思いますが (つまり、優れた GCはscopeではなくobjectsを追跡します)、他の人を説得するのに十分な知識がありません。

決定論的デストラクタを持つガベージ コレクション言語がない理由について説明してもらえますか?

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

php - PHPはRAIIパターンをサポートしていますか?どのように?

PHPのほとんどのリソースは、言語自体がこれを行うのに非常に優れているため、メモリ管理に触れることはありません。ただし、PHPでは、メモリではない外部リソース(データベースハンドル、セッション、データベーストランザクションなど)を処理することがよくあります。これらの外部リソースは、何らかの形式のRAIIオブジェクトを使用して最もクリーンに管理できます。

PHPは、デストラクタの概念が存在しないJVMやCLRと同様のガベージコレクションスキームを使用していると当初は思っていました。(覚えておいてください:誰もがガベージコレクションを間違った方法で考えています-ファイナライザーはデストラクタではありません!)特別な__destruct方法がありますが、それはJavaやC#ファイナライザーに似た「ファイナライザー」だと思いました。このため、JVMまたはCLRでRAIIを使用することはできません(C#のusingブロックはそこまでの道のりの約95%を取得しますが、それは少し異なります...)。

ただし、GoogleはPHPがRAIIパターンをサポートしていることを示しているようですが、PHPドキュメントでこれの検証を見つけることはできません。言語はこれをサポートしており、__destructRAIIタスクを実行するのに十分なクリーンアップロジックを配置していますか?