Können sagen, ich habe folgendes:Wann wird eine Mitgliedsfunktion nicht mehr angezeigt?
struct Foo
{
Foo() : bar([&]{ doSomething();})
std::function<void(void)> bar;
void doSomething(){};
}
Und lässt einen Thread sagen ständig von einem Foo Instanz das Stabelement ruft, während ein anderer Thread die Foo Instanz selbst zerstört. Ist es möglich, dass ein Aufruf von bar zu einem ungültigen Funktionsaufruf führt, da der Destruktor von Foo zuerst aufgerufen wird? Führt der Destruktor von Foo Memberfunktionsaufrufe vor der Freigabe aus?
Edit: Sorry, ich hätte etwas genauer sein sollen, wird DoSomething undefiniert, bevor der Destruktor der Bar aufgerufen wird?
Elementvariablen existieren in Objekten. Wenn es kein Objekt gibt, wie könnte die Elementvariable existieren? –
Es liegt in Ihrer Verantwortung sicherzustellen, dass kein Thread ein Objekt zerstört, während ein anderer Thread es verwendet oder verwenden könnte. –
Dies ist übrigens der Hauptgrund, warum ein Objekt seine eigene Zerstörung nicht synchronisieren kann. Wenn Sie 'Destruction Requests' implementieren wollen, dh, ein Objekt kann zur Destruktion aufgefordert werden, während gleichzeitig andere Requests bearbeitet werden, muss dies * extern * und nicht die Klasse selbst synchronisiert werden. – ComicSansMS