Les résultats suivants sont très intéressants et j'ai du mal à les comprendre. Fondamentalement, j'ai une classe qui a un int:Comportement étrange des pointeurs en C++
class TestClass{
public:
int test;
TestClass() { test = 0; };
TestClass(int _test) { test = _test; };
~TestClass() { /*do nothing*/ };
};
Une fonction de test qui accepte un pointeur de TestClass
void testFunction1(TestClass *ref){
delete ref;
TestClass *locTest = new TestClass();
ref = locTest;
ref->test = 2;
cout << "test in testFunction1: " << ref->test << endl;
}
C'est ce que je fais dans le principal:
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;
}
I s'attendait à ce que la production soit:
test before: 1
test in testFunction1: 2
test after: 1
Mais je reçois la sortie suivante:
test before: 1
test in testFunction1: 2
test after: 2
Quelqu'un peut-il expliquer cela. Chose intéressante est que le changement testFunction1 à:
void testFunction1(TestClass *ref){
//delete ref;
TestClass *locTest = new TestClass();
ref = locTest;
ref->test = 2;
cout << "test in testFunction1: " << ref->test << endl;
}
-à-dire que je ne supprimer ref avant pointant vers un nouvel emplacement, je reçois la sortie suivante:
test before: 1
test in testFunction1: 2
test after: 1
J'apprécierais vraiment si quelqu'un peut me expliquer ce comportement étrange. Merci.
aucun changement ne fait dans le principal – umair