C++中动态堆对象调用data function创建的局部变量存储位置问询
堆对象调用成员函数时局部变量的存储位置
不管对象是在堆上还是栈上实例化的,其成员函数中创建的非动态分配的局部变量,一律存储在栈中。
原因很简单:成员函数的执行依赖程序的调用栈,函数运行时会生成对应的栈帧,局部变量就是栈帧的一部分——这和对象本身存在堆还是栈没有关系。只有当你用new(C++)或malloc(C)这类动态分配方式创建变量时,对应的内存才会分配在堆上。
举个C++代码例子:
class Demo { public: void test() { int stack_var = 42; // 这个变量存在栈上 int* heap_ptr = new int(100); // 指针heap_ptr在栈上,它指向的内存块在堆上 } }; int main() { // 在堆上实例化对象 Demo* heap_obj = new Demo(); heap_obj->test(); // 调用test时,stack_var依然在栈中 delete heap_obj; return 0; }
总结一下:对象的存储位置不影响成员函数局部变量的存储方式,局部变量默认在栈,动态分配的内存才在堆。
内容的提问来源于stack exchange,提问作者Santi J Fry
相关产品推荐
相关产品推荐

