As far as I know, I should destroy in destructors everything I created with new
and close opened filestreams and other streams.
However, I have some doubts about other objects in C++:
std::vector
andstd::string
s: Are they destroyed automatically?If I have something like
std::vector<myClass*>
of pointers to classes. What happens when the vector destructor is called?
Would it call automatically the destructor ofmyClass
? Or only the vector is destroyed but all the Objects it contains are still existant in the memory?What happens if I have a pointer to another class inside a class, say:
class A { ClassB* B; }
and Class A is destroyed at some point in the code. Will Class B be destroyed too or just the pointer and class B will be still existent somewhere in the memory?
It depends.
If you have a vector of values
std::vector <MyClass>
, then the destructor of the vector calls the destructor for every instance ofMyClass
in the vector.If you have a vector of pointers
std::vector <MyClass*>
, then you're responsible for deleting the instances ofMyClass
.ClassB
instance would remain in memory. Possible ways to haveClassA
destructor to make the job for you are to makeB
an instance member or a smart pointer.You only need to worry about for the memory you have created dynamically (When you reserve memory with
new
.)For example: