我想知道在本地方法中实例化的对象存储在哪里?据我所知,对象存储在堆中,它们的引用存储在堆栈中。如果是这样,那么当函数返回时,对象的引用不再存在(因为弹出了函数的本地堆栈帧),对象是否保留在堆中,或者我们是否必须手动删除它(或者使用垃圾收集,如Java)?
答案 0 :(得分:2)
这取决于您打算如何处理该对象,如果您返回该对象,则它的生命周期会延长。如果你把它创建为临时的,那么有两种可能的结果。
如果使用new
创建对象。如果创建指向新对象的指针,则当方法超出范围时,将删除指针。但是对象仍然导致内存泄漏,需要明确删除该对象。
如果您不使用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;
}