別のスレッドでコードを実行するため、または少し後でコードを実行するためにラムダ関数を作成しましたが、ラムダ関数によって保持されているオブジェクトがその間に削除される可能性があります。
どうすればそれを検出し、その場合に関数を実行しないことができますか?
例えば
class A
{
public:
A(){}
virtual void test(){std::cout << m;}
int m;
};
int main()
{
A* a = new A();
std::function<void ()> function = [=]()->void
{
//if( pointer to 'a' still valid )
{
a->test();
}
};
delete a;
//or if( pointer to 'a' still valid )
function();
system("pause");
return 0;
}
または、ラムダ関数を実行する前に検出を行うこともできます。
もう1つのアイデアは、オブジェクト「Runnable」にラムダ関数を保持させ、削除可能なオブジェクトに登録することです。次に、デストラクタでRunnableに通知し、実行を阻止します。
それはそれを行うための良い方法でしょうか?