問題タブ [object-lifetime]
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.
delphi - ネストされた TRY / FINALY ステートメントを実行するためのベスト プラクティス
こんにちは、デルファイでネストされた try & finally ステートメントを実行する最良の方法は何ですか?
これを行うためのより良い方法を提案できますか?
c++ - スマート ポインターとその必然的な不確定性に関する質問
過去 2 年間、プロジェクトでスマート ポインター (正確には boost::shared_ptr) を広く使用してきました。私はそれらの利点を理解し、高く評価しており、一般的にそれらをとても気に入っています. しかし、それらを使用すればするほど、プログラミング言語で気に入っているように見えるメモリ管理と RAII に関する C++ の決定論的な動作が恋しくなります。スマート ポインターは、メモリ管理のプロセスを簡素化し、とりわけ自動ガベージ コレクションを提供しますが、問題は、一般的に自動ガベージ コレクションを使用し、スマート ポインターを具体的に使用すると、初期化 (非) 化の順序である程度の不確定性が導入されることです。この不確定性は、プログラマーからコントロールを奪い、最近気付いたように、API の設計と開発の仕事をします。
さらに詳しく説明すると、現在 API を開発しています。この API の一部では、特定のオブジェクトを他のオブジェクトの前に初期化または破棄する必要があります。別の言い方をすれば、初期化 (非) 化の順序が重要な場合があります。簡単な例として、System というクラスがあるとします。システムは、いくつかの基本的な機能 (この例ではロギング) を提供し、スマート ポインターを介して多数のサブシステムを保持します。
すでにおわかりのように、サブシステムはシステムのコンテキストでのみ意味があります。しかし、そのような設計のサブシステムは、その親システムよりも簡単に存続できます。
サブシステムを保持するために生のポインターを使用していた場合、システムがダウンしたときにサブシステムを破棄していたでしょう。もちろん、pSomeSubsystem はダングリング ポインターになります。
クライアント プログラマを保護するのは API 設計者の仕事ではありませんが、API を正しく使いやすく、間違って使いにくくすることは良い考えです。だから私はあなたたちに尋ねています。どう思いますか?この問題をどのように緩和すればよいですか? そのようなシステムをどのように設計しますか?
前もって感謝します、ジョシュ
asp.net-mvc - MVCオブジェクトインスタンスまたは静的クラス?
オブジェクトインスタンスまたは静的ヘルパークラスをいつ作成するかについて混乱しています。たとえば、データモデルを更新してデータベースに送信するメソッドを呼び出すと、DataContextのインスタンスが作成されます。そのDatacontextの存続期間はどのくらいですか?新しいデータの更新が必要になるたびに新しいインスタンスを作成しても大丈夫ですか?
私のコントローラーでは、DataCOntextのインスタンスを作成し、たとえばコントローラーにポストバックするときにそのインスタンスを再利用します。
c# - .NET - ファイナライザーと exit(0)
終了するためにスレッドでexit(0)
(from )への呼び出しを使用する .NET C# / C++ アプリがあります。<stdlib.h>
奇妙な点は、状況によっては、マネージド オブジェクトのファイナライザーが への呼び出しの直後に呼び出されexit
、他の状況ではまったく呼び出されないことです。
状況は非常に決定論的です。アプリは、その有効期間中に外部プラグイン dll (アンマネージ C で記述) からいくつかのメソッドを呼び出します。
dll A を使用すると、ファイナライザーが常に呼び出されます。
dll B を使用すると、ファイナライザーは呼び出されません。
exit(0) 呼び出しの場合のファイナライザーの予想される動作は何ですか? (予期され、文書化された動作がある場合)
外部 dll への呼び出しは、プロセスが終了する方法に影響を与える可能性のあるグローバル設定を変更できますか?
c++ - C++ イテレータの有効期間と有効性は?
要素が順不同で削除される可能性のある C++ のモノのリストを実装する予定です。ランダム アクセスが必要になるとは思いません (定期的にリストをスイープする必要があるだけです)。アイテムの順序も重要ではありません。
だから私std::list<Thing*> with this->position = insert(lst.end(), thing)
はそのトリックをやるべきだと思った。lst.erase(this->position)
Thing クラスに各インスタンスの位置を記憶させて、後で一定の時間内に簡単に実行できるようにしたいと思います。
ただし、私はまだ C++ STL コンテナーに少し慣れていないため、イテレーターを長期間保持しても安全かどうかはわかりません。特に、挿入された Thing の前後に他の要素が削除されることを考えると、Thing がなくなる前に。
dependency-injection - 他のどのIoCコンテナにIInitializableのような機能がありますか?
以前のプロジェクトでCastleWindsorを使用していて、とても気に入りました。現在のプロジェクトでは、別のIoCコンテナを使用することを検討しています。Castle Windsorは、2007年以降、新しいリリースがなく、バージョン1.0でもないため、商用環境で使用することを正当化することは困難です。
Castle Windsorについて私が気に入っていることの1つは、サービスを実装するだけで、すべての依存関係が設定された後、コンテナーにサービスのInitializeメソッドを呼び出させることができることですIInitializable
。私はこれをよく使いました。コンストラクターインジェクションの代わりにプロパティインジェクションを簡単に実行できるようになり、コードとテストがかなりクリーンアップされます。
代わりにStructureMap、AutoFac、Unity、Spring.Netを見てきましたが、これらのうちSpring.Netだけが同様のものをサポートしており、自動的にInit()
メソッドを呼び出します。残念ながら、Spring.Netは、IoCコンテナーを操作する方法を実際にはサポートしていません(インターフェイス宣言ではなく文字列キーに基づいて挿入するため、自動配線のサポートも制限されています)
私が見たIoCコンテナの同様の機能を見逃しましたか?IoCコンテナの操作方法はどういうわけか間違っていますか?または、IInitializableやInit()のようなものをサポートする他のIoCコンテナはありますか?
memory - 変更可能な状態値がヒープから解放されるのはいつですか?
F# WikiBook のEncapsulating Mutable Stateセクションには、次のコード スニペットがあります。
最初は、変更可能な値が呼び出されるたびにcounter
インクリメントされるという事実を飲み込むのは簡単に思えました。incr
しかし、しばらく考えた後、私が理解できなかったのは、いつcounter
ヒープから解放され、counter
インクリメントされる前に以前の値をどのように参照しているのかということでした。counter
関数スコープ内での生活は、incr
複数の関数呼び出しを通じてどのように生き残るのでしょうか?
主な質問は次のとおりです。
- いつ
counter
ヒープから解放されますか? counter
メモリリークじゃない?
oop - IStartable のような概念を使用する利点は何ですか?
このようなインターフェースを使用する代わりに:
私は通常、オブジェクトのコンストラクターに Start() コードを実行させ、IDisposable を実装して、dispose メソッドが Stop() コードを実行するようにします。
スタイルだけの問題ですか?それとも、IStartable のようなものを持っていないことで、何か重要なものを見逃していますか? 開始/停止状態を維持する必要があるため、余分な複雑さが見られます。
特に IoC/DI コンテナーのコンテキストで、開始/停止を使用する場合と ctor/dispose を使用する場合の長所と短所は何ですか?
編集:素晴らしい答えです。開始可能なオブジェクトにインターフェイスを使用するように説得しました。誰の回答がベストかは判断できないので、24 時間後に最も多くの賛成票を獲得した人を受け入れます。
objective-c - NSView の割り当てが解除されたことを検出する
NSView がいつ解放されるかを検出する方法はありますか?
その理由は、いくつかの単純なデリゲート (-control:textView:doCommandBySelector: を処理して return/tab キーを入力できるようにする NSTextField デリゲートなど) があるためです。このデリゲート オブジェクトを nib に貼り付け、NSTextField のデリゲート接続を接続して動作させたいと思います。
それは機能しますが、リンクされている NSTextField が解放された後でもデリゲートは決して解放されないため、デリゲート オブジェクトがリークします。
デリゲート オブジェクトが NSTextField の割り当てが解除されたことを検出できるようにしたいのですが、これを行う方法が思いつかないため、他のコントローラーからデリゲート オブジェクトへの別のリンクを保存する必要があります。ある時点で手動で解放しますが、これは理想的とは言えません。何か案は?
powershell - プロセスの終了前に Powershell 実行空間オブジェクトを閉じる/破棄しないと、どのような影響がありますか?
(System.Management.Automation.Runspaces からの) Runspace オブジェクトのシングルトン インスタンスをアプリケーションの有効期間にわたって維持するアプリケーションを考えると、アプリケーションが終了する前に Runspace を破棄しないと、どのような副作用が生じる可能性がありますか?
私が提示された設計上の根拠は、この場合、メモリ/ハンドル リークは問題にならないというものです。これは、プロセスの終了によってこれらのリソースがすべて強制的に解放され、シングルトンの有効期間がアプリケーションと同じであるためです。その設計で無視されている他の考慮事項はありますか?