Странное поведение указателей в с ++

Следующие результаты очень интересны, и мне трудно их понять. В основном у меня есть класс, который имеет int:

class TestClass{
public:
    int test;
    TestClass() { test = 0; };
    TestClass(int _test) { test = _test; };
    ~TestClass() { /*do nothing*/ };
};

Тестовая функция, которая принимает указатель TestClass

void testFunction1(TestClass *ref){
    delete ref;
    TestClass *locTest = new TestClass();
    ref = locTest;
    ref->test = 2;
    cout << "test in testFunction1: " << ref->test << endl;
}

Это то, что я делаю в основном:

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;
}

Я ожидал, что результат будет:

test before: 1
test in testFunction1: 2
test after: 1

Но я получаю следующий вывод:

test before: 1
test in testFunction1: 2
test after: 2

Может кто-нибудь объяснить это. Интересно, что изменение testFunction1 на:

void testFunction1(TestClass *ref){
    //delete ref;
    TestClass *locTest = new TestClass();
    ref = locTest;
    ref->test = 2;
    cout << "test in testFunction1: " << ref->test << endl;
}

То есть. Я не удаляю ref, прежде чем указывать его на новое место, я получаю следующий вывод:

test before: 1
test in testFunction1: 2
test after: 1

Я был бы очень признателен, если бы кто-нибудь объяснил мне это странное поведение. Благодарность

Ответы на вопрос(6)

Ваш ответ на вопрос