以下の結果は非常に興味深いもので、理解に苦慮しています。基本的に、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
誰かが私にこの奇妙な振る舞いを説明してくれたら本当にありがたい. ありがとう。