在方法内创建的对象

Objects created inside a method

本文关键字:对象 创建 方法      更新时间:2023-10-16

我想知道存储的本地方法中的对象在哪里实例化?就我的知识而言,对象存储在堆中,它们的引用存储在堆栈中。如果是这样,那么当功能返回时,对对象的引用不再存在(因为弹出了函数的本地堆栈框架),对象是否停留在堆中,或者我们必须手动删除它(或使用垃圾收集,如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;
}