Since I haven't been in your course, I can only guess:
1: C++ is a kind of lego kit - you take what you need and you can leave everything else. You don't have to pay for it either. Adding this additional level requires some initialization and stuff and I suppose you can't select not to use it - even if you don't require it.
2: RTTI for classes with vtable
3: Here I can only guess - I suppose that all instances of a class are somehow reachable by the meta class or can be detected by scanning the memory. If that's the case, you can implement mark&sweep.
4: virtual destructors are needed if you destroy a class instance via a pointer that has the type of one of the base classes. If you can reach from each instance the meta class, you can then call the correct destructor without the need of having to look it up in the vtable.