I’m creating a vector of ints on the heap like this:
std::vector<int> vec = *new std::vector<int>();
then I get to the end of my program and I need to free the memory, but using vec.clear() doesn’t free the memory.
How do I do this properly?
Thanks and all the best
-Mitchell
Replace this:
With this:
Problem solved.
Unlike other languages you may have come across,
newis best avoided in most situations. It dynamically allocates objects, like in other languages. But unlike other languages, C++ doesn’t have a garbage collector, so you need to manually destroy objects that you dynamically allocate. However, the way you’ve written your code, you’ve made that impossible.You’re dynamically allocating an object with new, which returns a pointer to the object. Then you are dereferencing that pointer (via *), and copying the object to
vec.vecgets properly destroyed, but the dynamically allocated object that it was copied from does not. And since you didn’t store that pointer, you’re left with no way to access that object, and no way to dispose of it. In order to destroy that object, you would have had to capture the pointer, like this:Then later, you could call delete on the pointer, which destroys the object and deallocates the memory:
Thankfully, dynamic allocation is not a necessity as it often is in those other languages. Declaring an object creates it, and it is destroyed when it goes out of scope. So the simple line of code I showed you is sufficient, with no delete statement necessary.
As a side note, if you’ve determined, for some reason, that you must have dynamic allocation. Use a smart pointer (google that).