Странное поведение указателей в с ++
Следующие результаты очень интересны, и мне трудно их понять. В основном у меня есть класс, который имеет 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
Я был бы очень признателен, если бы кто-нибудь объяснил мне это странное поведение. Благодарность