我想知道本地方法中实例化的对象存储在哪里?据我所知,对象存储在堆中,它们的引用存储在堆栈中。如果是这样,那么当函数返回时,对对象的引用不再存在(因为函数的本地堆栈帧被弹出),该对象是否留在堆中,或者我们是否必须手动删除它(或使用垃圾收集,如 Java 中那样)?
最佳答案
这取决于您打算如何处理该对象,如果您返回该对象,那么它的生命周期就会延长。如果您将其创建为临时的,则有两种可能的结果。
如果使用
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;
}
关于java - 在方法内部创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40931721/