BTW i wasnt aware that delete  some_pointer_to_class_array; calls the destructor of these classes, and its subclasses too (without calling destruction of subclasses in class destructor)
I would strongly urge you to master some of the basic basics of C++ before going any further.
Please note: constructing an object always calls a constructor, and destroying an object always calls its destructor. Always. Remember, copy constructors are constructors. Learn the rule of 3 (or 5 for the more advanced student).
Contained objects get constructed and destroyed when the object that holds them is constructed and destroyed. Always. If you explicitly invoke the destructor of a contained object in the destructor of the object that holds it, that object will be destroyed twice destroyed twice and you will probably corrupt your heap. It's called a double delete.
Unless you're an advanced C++ user writing very specialized code, you never invoke a destructor directly.