Function is only called from constructors, so failing to initialize important subsystems would leave projectM unusable, and we can simply let the exception bubble up to the caller. Such exceptions are already being caught in the C wrapper.
Mostly replaced raw pointers with std::unique_ptr for easier memory management. Probably not needed for many of those classes, but was the least intrusive change for now.
The library should not hold up any external render loop. Waiting for vsync or achieving a target FPS value should be done by the outside application after presenting the render result.