問題タブ [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.
c++ - shared_from_this とデストラクタをブーストする
クラスからデストラクタで shared_from_this を呼び出すことは許可されていないことがわかりました。
https://svn.boost.org/trac/boost/ticket/147
この動作は仕様です。デストラクタはオブジェクトを破棄するため、デストラクタが終了するとぶら下がり状態になるため、そのオブジェクトに shared_ptr を作成するのは安全ではありません。
議論は理解できますが、参照をクリーンアップするために「shared_from_this」ポインターが必要な場合はどうでしょうか (所有者シップを共有するためではありません)。
以下は、shared_ptr を使用していない例です。
ここでは、それを共有ポインターに変換しようとしました。しかし、デストラクタを終了する良い方法が見つかりません:
上記の例でデストラクタを実装するにはどうすればよいですか?
c++ - デストラクタが呼び出される前にオブジェクトの存続期間が終了しましたか?
私はこれを理解していません:
3.8 / 1 "タイプTのオブジェクトの存続期間は、次の場合に終了します。— Tが重要なデストラクタ(12.4)を持つクラスタイプの場合、デストラクタ呼び出しが開始するか、または—オブジェクトが占有するストレージが再利用または解放されます。 「」
デストラクタが開始する前にライフタイムが終了する場合、それはデストラクタのメンバーへのアクセスが未定義の動作であることを意味しませんか?
私もこの引用を見ました:
12.7「重要なデストラクタを持つオブジェクトの場合、デストラクタの実行が終了した後にオブジェクトの非静的メンバーまたは基本クラスを参照すると、未定義の動作が発生します。」
しかし、デストラクタ中に何が許可されるかは明確ではありません。
c++ - 静的ベクトルを削除する必要がありますか?
私は c++ を学んでいますが、ベクトルとの混乱を経験しています。具体的には、静的ベクターが内部で動的配列を実装している場合、動的配列によって使用されているスタック メモリは、プログラムの終了時に解放されますか、それとも削除操作を使用するか、静的ベクターでデストラクタを呼び出す必要がありますか?
c# - SLカスタム制御:メモリリークを防ぐためにイベントの登録を解除するときは?
OnApplyTemplate()でテンプレートの子にいくつかのイベントを登録するカスタムwp7Silverlightカスタムコントロールを作成しています。
メモリリークを防ぐために、これらの登録を解除する必要があると思います。でもいつ?アンロードされたイベントを試してみます-これは機能しますが、これに問題があります。シナリオ:Page1には、カスタムコントロールがあります。次に、Page1からPage2に移動すると、カスタムコントロールのUnloadedイベントが呼び出されます。ここまでは順調ですね。しかし、その後、カスタムコントロールのイベントが再度登録されないため、そのコントロールを使用しても何も起こりません。
次に、すべてが期待どおりに機能し、メモリリークが発生しないように、イベントを正しく登録および登録解除する必要がありますか?
ご協力いただきありがとうございます!
編集:
OnApplyTemplate()メソッドの例を次に示します。
c++ - 基本クラス コンストラクターからの純粋仮想関数の呼び出し
純粋仮想関数を含む基本クラス MyBase があります。
void PrintStartMessage() = 0
各派生クラスがコンストラクターでそれを呼び出すようにしたい
次に、それを base class( MyBase
) コンストラクターに入れます
しかし、リンカーエラーが発生します。
すべての派生クラスに強制したい...
どうすればいいですか?
.net - MEF は NonShared IDisposable パーツの参照を保持し、GC による収集を許可しない
Prism アプリケーションでメモリ リークを引き起こす MEF のパーツ ライフタイムで問題が発生しました。
PartCreationPolicy
私のアプリケーションは、に設定されているビューとビューモデルをエクスポートしますCreationPolicy.NonShared
。ViewBase
ビューとビューモデルはそれぞれとを継承しViewModelBase
、 を実装しIDisposable
ます。
現在、私のパーツは を実装IDisposable
しているため、それらへの参照はコンテナーによって保持されているため、ガベージ コレクターによって解放されません。部品の寿命に関する MEF のドキュメントによると、これは設計によるものです。
コンテナーは、次のいずれかに該当しない限り、作成したパーツへの参照を保持しません。
- パーツは次のようにマークされます
Shared
- 部分は実装します
IDisposable
- 再構成を許可するように 1 つ以上のインポートが構成されています
では、MEF がこれらのパーツへの参照を保持しないようにするにはどうすればよいでしょうか。MEF が実装されていても、自分のパーツへの参照を保持したくないことを MEF に知らせるために使用できる属性はありますIDisposable
か?
上記の記事で説明した両方の戦略は、私にとって良い解決策とは思えません。
ReleaseExport
パラメータとしてオブジェクトが必要ですがExport
、提供方法がわかりません。ビューのインスタンスはありますが、ビューの作成に使用されたコントラクトを知る方法がありません。ReleaseExport
コンテナーによって作成された任意のオブジェクトを受け取ることができるオーバーロードがあれば、それは素晴らしいことです。- 子コンテナーを使用することも、自然な選択肢のようには思えません。
どんな助けでも大歓迎です。
asp.net - ASP .NET アプリケーションのライフ サイクル + シングルトン インスタンスのライフ タイム
次のシナリオを考慮してください。
- ASP .NET MVC 3 フレームワークを使用して、完全な Web アプリケーションを作成しました。現在、私のアプリケーションは Web サーバーによって管理されています。
- アプリケーションのサーバー側で HTTP 要求が受信されます。
- シングルトン デザイン パターンを実装するクラスは、サーバー側でインスタンス化されます。
- ブラウザに応答が送信されます。
- アプリケーションのサーバー側で別の HTTP 要求が受信されます。ステップ 2 で使用したシングルトン インスタンスは、サーバー側で引き続き使用できますか?
このページで ASP .NET アプリケーションのライフ サイクルに関する情報を読みました: http://msdn.microsoft.com/en-us/library/ms178473.aspx
しかし、私はまだ私の質問に答えることができません。
今後ともよろしくお願いいたします
VS2010でいくつかのテストを行いました。
私のプロジェクトの主なコンポーネントのリストは次のとおりです。
- Index HttpGet アクション メソッドを含むホーム コントローラー。
- Index アクション メソッドの結果のビュー。
- シングルトン デザイン パターンを実装する SingletonTest クラス。
SingletonTest クラスのコードは次のとおりです。
Index アクション メソッドのコードは次のとおりです。
ビューのコードは次のとおりです。
ここで私が従ったテストシナリオ:
- IIS サーバーは、VS2010 によって自動的に起動されています。
- /Home/Index/ URL をリクエストしたところ、値 1 が表示されました。
- /Home/Index/ URL をリクエストしたところ、値 2 が表示されました。
- ...
このテストは、ステップ 1 で作成された SingletonTest インスタンスが、次の要求を処理するときに使用できることを示しています。サーバー上の Web アプリケーションにメモリ空間が割り当てられていると思います。
次に、IIS サーバーを停止し、テスト シナリオを再び実行しました。以前と同じ結果が得られました:1、2、....
repository - Unityを使用して2つのリポジトリ間でUnitOfWorkを共有するための最良のアプローチは何ですか?
UnitOfWorkとRepositoryパターンのほかにUnityをIoCとして使用したいと思います。いろいろな関連記事や質問を読みましたが、どれも完全に満足するものではありませんでした。私はすべてのアプローチに問題があります。例は私の問題をよりよく説明するでしょう:
2つの別々のクラス(おそらくビジネスサービス)で2つのリポジトリを操作したいのですが、全体的な作業は1つのユニットにまとめられています。
開始点はLocalService1.Method1メソッドです。
主な質問は、「LocalService1.Method1を呼び出しているときに、UnitOfWork(ここではObjectContext)をIRepository1とIRepsitory2の間で共有するにはどうすればよいですか?」です。さらに重要なのは、「UnitOfWorkの廃棄について確実にしたい」ということです。
私は答えがこれらの問題に焦点を当てると思います:
- IoC構成
- ライフタイム構成
- 廃棄時間(いつ、どのように?)
「HttpContext」の使用を推奨する場合は、Web以外の環境について検討してください。
私の質問はほとんど「生涯管理」についてですが、徹底的なアプローチを探しています。
c# - 変数/メンバーなしでActionオブジェクトを繰り返し割り当てないようにする
多くの場合、非常に頻繁に実行されるコード内のオブジェクト割り当てを最小限に抑える必要があります。
もちろん、オブジェクトプーリングなどの通常の手法を使用することもできますが、ローカルに含まれているものが必要な場合もあります。
これを達成するために、私は以下を思いついた:
現在、使用法は次のようになります。
私が改善したいのは、すべてが1つの場所に含まれていないという事実です(.SetResetAction
実際に使用されている場所とは別です)。
次のようなコードを取得したいと思います。
Action<T>
これに伴う問題は、ループごとにオブジェクトの割り当てを取得する(作成する)ことです。
オブジェクトを割り当てずに、私が求めている使用法を取得することは可能ですか?
ReuseableList<T>
もちろん、組み込みのを作成することもAction
できますが、アクションが異なる可能性がある他のケースを考慮に入れたいと思います。
c++ - この方法でオブジェクトを破棄して再作成することは可能ですか?
を考えてみましょうT* o = new(T())
。ここで、T にはコピー コンストラクターが定義されています。また、式new
がデフォルトを使用するとします。::operator new()
でオブジェクトを削除する代わりに、o に割り当てられたメモリを再利用するためにdelete o
、標準では次のシーケンスが許可 されていますか?
o->~T()
明示的に呼び出す- 以前に o に割り当てられたメモリ上にオブジェクトのコピーを作成するには、placement new を使用します: new(o) T(x)
- o とその記憶が終わったら、
delete o
たとえば、上記のシーケンスがこの要件なしで機能する場合、T に適切な代入演算子を定義する必要がある理由std::map<T, V>
(または具体的に)がわからないため、これも尋ねます。ほとんどの場合、同じように実装されているoperator[]
ため、コピーコンストラクターが異なるセマンティクスを持つ可能性があるという理由だけで、マップがこのように設計されているとは思えません。operator=()