[英]Objects created inside a method
我想知道本地方法中实例化的对象存储在哪里? 据我所知,对象存储在堆中,它们的引用存储在堆栈中。 如果是这样,则当函数返回时,并且对该对象的引用不再存在(因为弹出了该函数的本地堆栈框架),该对象是否留在堆中,还是必须手动删除(或使用垃圾收集,例如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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.