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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage