Я знаю, C++ выделяет память для указателя в куче, которая автоматически не будет автоматически при выходе из функции. Но после выполнения приведенных ниже кодов я обнаружил, что указатель a является нулевым, даже если ему выделено некоторое пространство в функции члена класса.Почему функция члена класса уничтожает память, выделенную для аргумента указателя?
#include "string"
#include <iostream>
using namespace std;
class Test
{
public:
void test(int *a) {
if (a == 0)
{
a = new int[10];
bool a_is_null = (a == 0);
cout << "in class member function, after allocated, a is null or not?:" << a_is_null << endl;
}
};
};
int main() {
int *a = 0;
bool a_is_null = (a == 0);
cout << "in main function, before allocated, a is null or not?:" << a_is_null << endl;
Test t;
t.test(a);
a_is_null = (a == 0);
cout << "in main function, after allocated, a is null or not?:" << a_is_null << endl;
delete[] a;
cin;
}
This is the conducting result.
Может кто-нибудь сказать мне, почему?
Выполняет ли функция тестирования уничтожение памяти new int[10]
при ее выходе? и так, чтобы после этого указатель a оставался равным нулю.
«C++ выделяет память для указателя в куче» - нет, где вы получите, что неверную информацию от ? –
Да. Ты прав. Должно быть, память, выделенная оператором 'new', находится в куче –