Merkwürdiges Verhalten von Zeigern in c ++
Die folgenden Ergebnisse sind sehr interessant und ich habe Schwierigkeiten, sie zu verstehen. Grundsätzlich habe ich eine Klasse mit einem int:
class TestClass{
public:
int test;
TestClass() { test = 0; };
TestClass(int _test) { test = _test; };
~TestClass() { /*do nothing*/ };
};
Eine Testfunktion, die einen Zeiger von TestClass akzeptiert
void testFunction1(TestClass *ref){
delete ref;
TestClass *locTest = new TestClass();
ref = locTest;
ref->test = 2;
cout << "test in testFunction1: " << ref->test << endl;
}
Das mache ich hauptsächlich:
int main(int argc, _TCHAR* argv[])
{
TestClass *testObj = new TestClass(1);
cout << "test before: " << testObj->test << endl;
testFunction1(testObj);
cout << "test after: " << testObj->test << endl;
return 0;
}
Ich hatte folgende Ausgabe erwartet:
test before: 1
test in testFunction1: 2
test after: 1
Aber ich bekomme folgende Ausgabe:
test before: 1
test in testFunction1: 2
test after: 2
Kann mir jemand das erklären. Interessant ist, dass testFunction1 folgendermaßen geändert wird:
void testFunction1(TestClass *ref){
//delete ref;
TestClass *locTest = new TestClass();
ref = locTest;
ref->test = 2;
cout << "test in testFunction1: " << ref->test << endl;
}
Das heißt, ich lösche ref nicht, bevor ich es auf eine neue Position zeige. Ich erhalte die folgende Ausgabe:
test before: 1
test in testFunction1: 2
test after: 1
Ich würde mich sehr freuen, wenn mir jemand dieses merkwürdige Verhalten erklären könnte. Vielen Dank.