Heap vs Stack allocation

后端 未结 4 848
醉梦人生
醉梦人生 2020-12-03 08:47

I am alittle bit confused on topic of allocating objects on heap vs allocating on stack, and when and how delete() should be called.

For example I have class Vector.

4条回答
  •  不知归路
    2020-12-03 09:10

    I'll start from the beginning...

    Vector** v = new Vector*[100];
    

    Allocates an array of 100 pointers to objects of type Vector on the heap It returns one pointer- v - the you can use to keep track of this array of pointers.

    Delete this array of 100 points with:

    delete[] v;
    

    (Use the delete operator- delete for a single allocated object, delete[] for an array)

    Next case (I'm assuming you mean new Vector[100]:

    Vector* v = new Vector[100];
    

    You allocated an array of 100 Vectors on the heap and got a pointer to its start location- v. Delete this array with:

    delete[] v;
    

    Next...

    class Vector
    {
      int x, y, z;
    }
    
    Vector* v = new Vector();
    

    This allocates an object of class Vector on the heap and gives you a pointer to keep track of it. Because you allocated the entire object on the heap, x, y, and z are all allocated on the heap.

    Delete it with:

    delete v;
    
    
    class Vector2
    {
       int items[10];
    }
    
    Vector2* v2 = new Vector2();
    

    This one is a bit trickier but I'm going to reason it out...

    Classes are blueprints. You haven't allocated any memory at all until you instantiate the class somehow, in this case on the heap. Because the class is a blueprint, items could not have been allocated until you created an object of class Vector2 on the heap. I think we can reasonably infer that items is thus allocated on the heap.

    Delete v2 with:

    delete v2;
    

    And finally:

    class Vector3
    {
       int* items;
    }
    
    Vector3 v3 = Vector3();
    

    You allocated all of class Vector3 on the stack, the pointer inside of it items is also allocated thus. Nothing went on the heap, so don't delete it.

提交回复
热议问题