Encapsulate each resource in a class which clears them in its destructor (with a surrounding try/catch):
struct ProperlyManagedA { // some means of using the resource - a rudimentary way is this: A &getA() { return a; } const A &getA() const { return a; } // cleanup ~ProperlyManagedA() { try { a.clear(); // whatever it is ClearResourceA actually does } catch (...) {} } private: A a; } A shared_ptr with a custom deleter is one way to achieve this without having to create a whole class for each type of resource.
You might be able to better thanimprove on discarding the exception (log the problem, for example), depending what's thrown.
Even better, modify resources A, B and C so that they clear themselves in their own destructors. That might not be possible, though.
Either way, you can then put as many such resources in a single class as you like, without adding any code to the destructor of the class. This is "scalability". The whole point of RAII, is that each user of a resource shouldn't have to write cleanup code in order to use the resource correctly.