为什么类成员函数会销毁为指针参数分配的内存
Why class member function destroies the memory allocated for a pointer argument?
据我所知,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;
}
这是导电的结果。
谁能告诉我为什么?
test函数退出时是否会破坏new int[10]
的内存?所以指针a在那之后仍然是空的
指针和其他变量一样,在
行中按值传递它t.test(a);
因此在函数退出后不修改指针。通过引用传递它,您将看到差异,例如声明
void Test::test(int* &a) { ...}
<<p> 生活例子/kbd> 相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 修改函数中的指针(将另一个指针作为参数传递)
- Clang bug?使用指针作为模板参数
- MSVC将仅移动结构参数解释为指针
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何使用非类型模板参数传入指向数组的指针
- 将成员函数指针作为参数传递给模板方法
- 匹配函数指针作为模板参数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 通过智能指针和转换对基本模板参数进行模板推导
- 为函数定义符号不明确的指针参数
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 将函数参数完美转发到函数指针:按值传递呢?
- 保留函数指针模板参数
- 如何构造一个以可变参数指针函数作为成员的类?
- 指向对象的非类型模板参数指针
- c++ 使用 *& as 参数(指针乐趣,三级树方法)