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

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

.net - スコープを変更する構造マップを持つ複数のコンストラクター?

問題を説明するために、ここに私のセットアップの簡易版を示します。私はこのような工場を持っています:

これをテストするプログラムは consoleApp です。私の主張を証明するには十分です。

Init 静的メソッドで strucutreMap をセットアップします。

コンストラクターが 1 つしかなく、StructureMap を次のようにセットアップする場合:

それは完璧に機能し、出力は
パラメーター
なしパラメーターなし
パラメーターなし を示します

呼び出しごとに新しいインスタンスが構築されます。

ここで、2 番目のコンストラクターのコメントを外しますが、パラメーターのないコンストラクターを同じデフォルトのライフスタイルで使用したいとします。どうすればいいですか?

私はそれを試しました:

機能しません: InstanceKey の要求されたインスタンス プロパティ "i" がありません

私がこれが好きなら:

機能しますが、出力は「パラメーターなし」の 1 つにすぎません。つまり、呼び出しごとに新しいインスタンスを構築していません。私が渡すこの特定のインスタンスを使用しています。

私が見つけた唯一の方法は、パラメーターなしのコンストラクターの上に [DefaultConstructor] を追加し、標準の x.For().Use(); を使用することです。しかし、この属性を追加して、構成をモデル全体に​​広げたくありません。

ヘルプ?

0 投票する
10 に答える
30732 参照

c# - AppDomain と MarshalByRefObject の寿命: RemotingException を回避するには?

MarshalByRef オブジェクトが AppDomain (1) から別の (2) に渡されるとき、2 番目の AppDomain でメソッドを呼び出す前に 6 分間待機すると (2)、 RemotingException が発生します。

System.Runtime.Remoting.RemotingException: オブジェクト [...] が切断されたか、サーバーに存在しません。

この問題に関するいくつかのドキュメント:

間違っている場合は訂正してください。InitializeLifetimeService が null を返す場合、プロキシが収集された場合でも、AppDomain 2 がアンロードされている場合にのみオブジェクトを AppDomain 1 で収集できますか?

ライフタイムを無効にして、プロキシが Finalized になるまでプロキシ (AppDomain 2 内) とオブジェクト (AppDomain1 内) を存続させる方法はありますか? 多分ISponsorと…?

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

c++ - OnDestroy()を呼び出した後、ActiveXコントロール(COleControl)はどうなりますか?

Internet Explorer8で実行されるC++で記述されたActiveXコントロールがあります。ほとんどの場合(約90%)、コントロールを含むタブまたはブラウザーを閉じると、次のようなアクセス違反が発生します。

アクセス違反は、OnDestroy()の呼び出し後、コントロールのデストラクタの呼び出しの前に発生します。

デバッグ出力には次のように表示されます。

実行中のある初期の時点でヒープが破損した可能性がありますが、私のコードはスタックトレースに存在しません。

OnDestroy()の呼び出しとコントロールのデストラクタの間にActiveXコントロールが受け取るライフサイクルイベントは何ですか?

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

c++ - C++ 標準のどの文言で static_cast が許可されるか(malloc(N)); 働く?

5.2.9 静的キャストの文言を理解している限り、void*-to-to-object-pointer 変換の結果が許可されるのはvoid*、最初に逆変換の結果であった場合のみです。

void標準全体を通して、ポインターの表現や、ポインターの表現と同じポインターの表現などへの参照がたくさんありますが、任意のポインターをキャストするとポインターが生成charされると明示的に述べているようには見えません。voidメモリ内の同じ場所に、異なる型で、オブジェクトの実際の型に戻らないタイプのパニングが未定義であるのと同じように。

そのため、適切なメモリのアドレスなどをmalloc明確に返しますが、私が見た限りでは、実際にそれを移植可能に利用する方法はないようです。

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

.net - 複雑なオブジェクトグラフでのIDisposableアンマネージドリソースの生涯の問題?

この質問は、管理されていないリソース(COM相互運用)を処理し、リソースリークが発生しないようにすることに関するものです。私が物事を正しい方法で行っているように見えるかどうかについてのフィードバックをいただければ幸いです。

バックグラウンド:


2つのクラスがあるとしましょう。

  • COMオブジェクトのラッパーであるクラスLimitedComResource(一部のAPIを介して受信)。これらのCOMオブジェクトの数は限られているため、私のクラスはIDisposable、COMオブジェクトが不要になったときにCOMオブジェクトを解放する役割を担うインターフェイスを実装します。

  • 別のタイプのオブジェクトは、でManagedObjectいくつかの作業を実行するために一時的に作成されますLimitedComResource。彼らはそうではありませんIDisposable

上記を図にまとめると、私のクラスは次のようになります。

(これら2つのクラスのサンプルコードをすぐに提供します。)

質問:


私の一時的なManagedObjectオブジェクトは使い捨てではないので、私は明らかにそれらがどれくらいの期間存在するかを制御することはできません。しかし、その間に私はaが参照しているDisposedを持っているかもしれません。もはやそこにないにアクセスしないようにするにはどうすればよいですか?LimitedComObjectManagedObjectManagedObjectLimitedComResource

私は現在、弱参照と、LimitedResourceオブジェクトがすでに破棄されているかどうかを示すフラグを組み合わせてこれを実装しています。より良い方法はありますか?

サンプルコード(私が現在持っているもの):


LimitedComResource

ManagedObject

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

c++ - destruct と copy_construct のアルゴリズム

私は現在vector、楽しみのために自分のおもちゃを作っています。現在または次の標準またはBoostに次のようなものがあるかどうか疑問に思っていましたか?

0 投票する
0 に答える
717 参照

wcf - WCFを使用したUnityチャイルドコンテナのライフタイム

Unityを使用して、現在のプロジェクトのWCFサービスレイヤー内に依存性注入を提供しています。次のような例に従って、サービスホストファクトリ、サービスホスト、サービス動作、およびインスタンスプロバイダーを記述しています。

http://avingtonsolutions.com/blog/post/2008/08/02/Uisng-Uni​​ty-with-a-WCF-Service.aspx

このソリューションは非常にうまく機能しますが、リクエストごとにオブジェクトのコンテキスト解決を提供する必要があります。これまで、インスタンスプロバイダーのGetInstanceメソッド内に子コンテナーを作成し、子コンテナーにコンテキスト登録を追加し、子コンテナーを使用してサービスタイプの解決を実行することにより、これを実装してきました。両方のコンテナーの一部の登録は、コンテナー制御の有効期間を使用します。

子コンテナの存続期間がわからないため、この方法論について懸念があります。1)子コンテナはGetInstanceメソッドの最後でスコープ外になり、その結果、コンテナで解決されたオブジェクトの一部が破棄されることになりますか?私たちの要求の途中で処分されましたか?

2)あるいは、親コンテナはしばらくの間子コンテナに固執しますか?これは、トラフィックの多い環境で子コンテナインスタンスで急速にいっぱいになることを意味しますか?

誰かが私を正しい方向に向けることができますか?

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

c# - 可変スコープの目的でブレースを使用するのは間違っていますか?

後で誤って変数を使用するのを避けるために、中かっこを使用してコード ブロックを分離することがあります。たとえばSqlCommand、同じメソッドに複数の を配置するときは、コード ブロックを頻繁にコピーして貼り付け、最後に名前を混ぜ合わせていくつかのコマンドを 2 回実行します。中括弧を追加すると、この状況を回避するのに役立ちSqlCommandます。間違った場所で間違ったものを使用するとエラーが発生するためです。以下に図を示します。

これで、StyleCop はブロックが空の行に続くたびに警告を表示します。一方、空行を入れないと、コードが理解しにくくなります。

そう、

  1. 可変スコープの目的のためだけに中括弧を使用してコードのブロックを作成することに何か問題がありますか?

  2. よろしければ、StyleCop の規則に違反せずに読みやすくするにはどうすればよいでしょうか?

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

c++ - Qt オブジェクトの有効期間

Qt オブジェクトの寿命は?

そのような:

ソケットはいつ破棄されますか? 使うべきか

違いはありますか:

これについての深い情報は見つかりませんでした。コメントやリンクは大歓迎です。

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

c# - オブジェクトの廃棄/破壊の通知を受け取ります

さまざまなクラスのインスタンスを追跡する方法が必要です。それらのクラスは、追跡されていることを認識していません。基本的に、インスタンスを作成して別のスレッドに渡すクラスファクトリがあります。そのスレッドが完了してインスタンスをアンロードしたら、その通知を受け取る必要があります。これにより、参照カウントを実行して、すべてのインスタンスがなくなったときにクラスファクトリを終了できます。

課題は、ソースコードを制御していないため、ロードするクラスを変更できないことです。

作成したインスタンスの追跡は簡単です。作成するときに、それらをある種のコレクションに入れることができます。彼らの破壊を追跡することは私に問題を引き起こしています。ソースコードを変更できれば、各クラスにイベントを追加し、インスタンスを作成するときに、イベントにフックして通知として使用します。しかし、それはできません。

だから、問題はこれです:オブジェクトインスタンスを監視し、それがいつ破壊されているかを検出する卑劣な方法はありますか?