繁体   English   中英

在方法内部创建的对象

[英]Objects created inside a method

我想知道本地方法中实例化的对象存储在哪里? 据我所知,对象存储在堆中,它们的引用存储在堆栈中。 如果是这样,则当函数返回时,并且对该对象的引用不再存在(因为弹出了该函数的本地堆栈框架),该对象是否留在堆中,还是必须手动删除(或使用垃圾收集,例如Java)?

这取决于您计划对该对象执行的操作,如果您返回该对象,则会延长其寿命。 如果将其创建为临时文件,则有两种可能的结果。

  1. 如果使用new创建对象。 如果创建指向新对象的指针,则该方法超出范围时,该指针将被删除。 但是该对象仍然会导致内存泄漏,因此需要明确删除该对象。

  2. 如果不使用new 范围结束时,该对象将被删除。

这两个结果都假定您不返回对象,而是在函数中将其实例化为临时对象。

这是一些示例代码:

class ObjectClass {
public:
        ObjectClass() {}

};

void myFunction() {
        ObjectClass my_obj(); //memory is handled for you
        ObjectClass * my_dynamic_obj = new ObjectClass();
        delete my_dynamic_obj; //if delete is not called then
        // the pointer my_dynamic_obj will be deleted but the object itself will remain
        return;
}

main() {
        myFunction();
        return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM