Der folgende Code führt zu SIGSEGV und ich kann nicht verstehen, warum das ist.Warum passiert std :: move (Objekt) und Mitglied dieses Objekts zu funktionieren SIGSEGV
#include <iostream>
using namespace std;
struct C {
C(int x) { ptr = new int(x); }
C(C&& c) { ptr = c.ptr; c.ptr = nullptr; }
int* ptr;
};
void foo(int* x, C c) {
cout << *x << endl;
}
int main() {
C c(10);
foo(c.ptr, std::move(c));
return 0;
}
Ich würde erwarten, dass der Zeiger c.ptr von Wert an die Funktion foo übergeben werden, aber es ist durch Bezugnahme wie seine vergangen verhält.
Wenn ich jetzt die Reihenfolge der Argumente ändern: void foo (C c, int * x), dann verschwindet das Problem. Die andere Lösung besteht darin, eine lokale Kopie von c.ptr vor dem Aufruf von x zu erstellen und diese lokale Kopie an foo weiterzuleiten.
Ich würde gerne verstehen, warum ich c.ptr nach Wert im obigen Beispielcode nicht übergeben kann.
Sie bewegten sich zu einem temporären ... – user1810087