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
and std::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 of myClass
? 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?
std::vector and std::strings: Are they destroyed automatically?
Yes (assuming member variables are not pointers to std::vector
and std::string
).
If I have something like std::vector what happens when the vector destructor is called? Would it call automatically the destructor of myClass? Or only the vector is destroyed but all the Objects it contains are still existant in the memory?
If vector<MyClass>
then all objects contained in the vector will be destroyed. If vector<MyClass*>
then all objects must be explicitly delete
d (assuming the class being destructed owns the objects in the vector
). A third alternative is vector
of smart pointers, like vector<shared_ptr<MyClass>>
, in which case the elements of the vector
do not need to be explictly delete
d.
What happens if I have a pointer to another class inside a class
The B
must be explicitly delete
d. Again, a smart pointer could be used to handle the destruction of B
.