在方法内创建的对象

我想知道在本地方法内部实例化对象存储? 就我所知,对象存储在堆中,并且它们的引用存储在堆栈中。 如果是这样,那么当函数返回时,对该对象的引用不再存在(因为函数的本地堆栈框架被弹出),该对象是否留在堆中,还是我们必须手动删除它(或使用垃圾收集,如在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