#include <iostream>
#include <stdexcept>

/*
 * Klassen zur Kapselung der Verwaltung dieser Resourcen vom Typ A und B.
 */
 
class AResource {
	public:
		AResource () {
			std::cout << "Initializing A...\n";
			if (/*error*/ false) throw std::runtime_error ("A initialization faild");
			m_value = 42; // <- Initialisiere die Daten dieser Ressource
		}
		~AResource () {
			std::cout << "Cleaning up A\n";
			// Verwende m_value um die Resource freizugeben
		}
		// Deklariere hier alle Daten die zu dieser Resource gehören...
		int m_value;
};

class BResource {
	public:
		BResource () {
			std::cout << "Initializing B...\n";
			if (/*error*/ true) throw std::runtime_error ("B initialization faild");
			m_value = 42; // <- Die Daten dieser Ressource
		}
		~BResource () {
			std::cout << "Cleaning up B\n";
			// Verwende m_value um die Resource freizugeben
		}
		// Deklariere hier alle Daten die zu dieser Resource gehören...
		int m_value;
};

/*
 * Verwendung dieser Resourcen (Usercode)
 */

void tuwas () {
	AResource a;
	BResource b;
	
	// Hier mit a und b arbeiten...
}

int main() {
	try {
		tuwas ();
	} catch (std::exception& e) {
		std::cout << e.what () << '\n';
	}
}