私は、メモリ不足の状況を適切に処理する必要があるメモリ集約型アプリケーションに取り組んでいます。
私は次のようなものを持っています
class memory_manager {
// returns true if slot created (and function is being run)
// false otherwise
static bool create_slot(int id, std::function<void (slot&)>); ........
}
このクラスは、すべてのメモリ不足の問題を処理、ログに記録し、すべてのスロットの所有権を保持し、同時実行を促進します。
ただし、std::bad_alloc
次のコードでは未処理です。
slot_data_to_copy dat;
memory_manager::create_slot(100, [&dat](slot& sx) { sx.assign_data(dat); });
変数のキャプチャ中にスローが行われると想定しています。(私は実際にそれらの多くをキャプチャしています。これは単なるサンプル例です)
閉鎖はどこで作成されますか? コントロールできますか?または、次のようにパラメーターを取る方法でマネージャーを更新すると、
slot_data_to_copy dat;
memory_manager::create_slot<slot_data_to_copy>
(100, dat, [](slot& sx, slot_data_to_copy& dat)
{ sx.assign_data(dat); }
);
まったくスローしないことが保証されていますか?
Windows で Visual C++ を使用し、Linux で GCC を使用してコンパイルしていますが、この動作は Windows でのみ観察されました (Linux では、おそらく処理できる場所でメモリが不足します)。
編集:
http://en.cppreference.com/w/cpp/utility/functional/function/function - std::function には非スロー演算子が含まれています.おそらく何かが欠けていますが、この(ラムダ)状況で使用されているものはどれですか?