You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:39:54