-
August 7th, 2010, 03:37 PM
#1
About vectors
How does a vector know when to destroy itself?
-
August 7th, 2010, 03:41 PM
#2
Re: About vectors
It's a class. It doesn't destroy itself, the destructor is called as soon as the class is deleted.
-
August 7th, 2010, 03:46 PM
#3
Re: About vectors
I'm assuming for each element inside a vector it's allocating memory internally.
So, this is never deleted if you dont use the vector anymore? And thus vectors cause memory leaks?
-
August 7th, 2010, 03:48 PM
#4
Re: About vectors
Originally Posted by ProgrammerC++
I'm assuming for each element inside a vector it's allocating memory internally.
So, this is never deleted if you dont use the vector anymore? And thus vectors cause memory leaks?
Of course not. The vector's memory is deleted when the vector is deleted or goes out of scope. If it's a vector of pointers, you need to delete the memory the pointers point to yourself.
-
August 7th, 2010, 03:59 PM
#5
Re: About vectors
so if you have
Code:
vector<T*> v;
T * ptr = new T();
v.push_back( ptr );
delete ptr;
//nothing with v done after this
//leak?
Last edited by ProgrammerC++; August 7th, 2010 at 04:02 PM.
-
August 7th, 2010, 04:05 PM
#6
Re: About vectors
No since the only thing v contains is a pointer to the deleted T object.
-
August 7th, 2010, 04:09 PM
#7
Re: About vectors
Memory does not have to be allocated to store the pointer to the T object?
-
August 7th, 2010, 04:13 PM
#8
Re: About vectors
It's not about the vector, but about the object it contains. Vector is made to be a dynamic object container, there will be of course use of allocators to dispatch and reclaim memory automatically
Right after you delete an allocated object the area it points to will be set free, all the later works can't inspire any more the provocation of the same pointer except overriding
-
August 7th, 2010, 04:16 PM
#9
Re: About vectors
So a memory leak occurs if I'm not clearing the vector
-
August 7th, 2010, 04:20 PM
#10
Re: About vectors
When did you allocate your vector ?
It's not the vector that you are allocating, it's the object of type T you are to deal with.
By the way, today I bought a sandwich. I have ketchup and chili sauces already
-
August 7th, 2010, 04:24 PM
#11
Re: About vectors
vector is allocated on the stack, it can't grow there, so it has to allocate memory to grow and hold elements like my pointer
-
August 7th, 2010, 04:42 PM
#12
Re: About vectors
Originally Posted by ProgrammerC++
vector is allocated on the stack, it can't grow there, so it has to allocate memory to grow and hold elements like my pointer
It managers its own memory. If the vector contains pointers, it won't delete the what the pointers point to.
-
August 7th, 2010, 04:46 PM
#13
Re: About vectors
Yes but where does it store the pointer to the object? It must be in newly allocated memory as soon as push_back is called
-
August 7th, 2010, 05:17 PM
#14
Re: About vectors
Originally Posted by ProgrammerC++
Yes but where does it store the pointer to the object? It must be in newly allocated memory as soon as push_back is called
Yes, that's correct. However, the vector cleans up after itself; that memory is automatically deallocated as soon as the vector goes out of scope or is otherwise itself destroyed.
In short: If you allocate something, then you have to clean it up. If an object allocates something internally, then that object is expected to clean it up in its destructor (if not before). This, incidentally, is a guideline you should follow in creating your own classes as well.
So a memory leak occurs if I'm not clearing the vector
Actually, clearing doesn't affect things at all----the vector is designed not to deallocate memory when it's cleared, only when it's destroyed. If you actually want a vector to resize itself smaller, then you need to use the "swap trick". (Usually, there's no pressing desire to do this however, so it's more efficient to let the vector keep its excess memory just in case you ever add more to it.)
Last edited by Lindley; August 7th, 2010 at 05:22 PM.
-
August 7th, 2010, 05:53 PM
#15
Re: About vectors
Originally Posted by ProgrammerC++
Yes but where does it store the pointer to the object? It must be in newly allocated memory as soon as push_back is called
Nothing stops a vector implementation from using an array initially for fast access, and if the number of elements exceeds a certain size, switch to dynamically allocated memory. All of that is required of vector is that the memory used to store the items must be contiguous. Where that memory comes from doesn't matter.
All of this shouldn't be of concern to you. The vector knows how to handle its own memory very nicely without outside help. What you should be concerned with is using a vector properly, not how internally it does things.
Regards,
Paul McKenzie
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|