には、以下の私が持っているとしましょう:メンバー関数はいつスコープから外れますか?
struct Foo
{
Foo() : bar([&]{ doSomething();})
std::function<void(void)> bar;
void doSomething(){};
}
を、別のスレッドはFooのインスタンスを破棄しながら、一つのスレッドが常にFooのインスタンスのバー部材を呼び出していると言うことができます。 Fooのデストラクタが最初に呼び出されたため、barへの呼び出しで無効な関数呼び出しが発生する可能性はありますか? Fooのデストラクタは、解放前にメンバ関数の呼び出しを無効にしますか?
編集: 残念ですが、もう少し具体的にすべきでしたが、バーのデストラクタが呼び出される前にdoSomethingが定義されなくなりましたか?
オブジェクトにはメンバー変数が存在します。オブジェクトがない場合、メンバー変数はどのように存在しますか? –
スレッドが別のスレッドを使用している間にオブジェクトを破棄しないようにするのは、あなたの責任です。 –
これは、オブジェクトが自身の破壊を同期できない主な理由です。 '破棄要求'を実装したい場合、つまり、他の要求を同時に処理しながらオブジェクトを破壊するように要求することができます。これは、クラス自体ではなく、外部で同期する必要があります。 – ComicSansMS