Drawbacks:
- Not collecting values that are still live when exit is called
- Increased shutdown time
The first one is a problem if exit is called in the middle of the program as a way to handle errors (which should be considered bad practice).
I am curious about your use-case. Have you considered deterministic resource management? (See my reply to Wrapping C++ std::shared_ptr and similar smart pointers, section 2.)