在方法内创建的对象
我想知道在本地方法内部实例化对象存储? 就我所知,对象存储在堆中,并且它们的引用存储在堆栈中。 如果是这样,那么当函数返回时,对该对象的引用不再存在(因为函数的本地堆栈框架被弹出),该对象是否留在堆中,还是我们必须手动删除它(或使用垃圾收集,如在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;
}
链接地址: http://www.djcxy.com/p/79797.html
上一篇: Objects created inside a method
下一篇: C++ Pointer node