#define RESOURCEHOLDER(DEFINITIONS, ENTRYCODE, EXITCODE, OBJECTNAME)\
    struct RESOURCEHOLDER_##OBJECTNAME{\
    	DEFINITIONS\
		RESOURCEHOLDER_##OBJECTNAME(){\
			ENTRYCODE\
		}\
		~RESOURCEHOLDER_##OBJECTNAME(){\
			EXITCODE\
		}\
	}OBJECTNAME

//Anwendungsbeispiel
#include <iostream>
#include <string>
using std::cout;
using std::string;
int main(){
	//2 Resourcen im selben scope:
	RESOURCEHOLDER(int i;, i = 5; cout << "RESOURCEHOLDER initialized\n";, cout << "RESOURCEHOLDER destroyed " << i << '\n';, rh);
	cout << rh.i << '\n';
	rh.i += 2;
	RESOURCEHOLDER(double j;, j = 12.; cout << "RESOURCEHOLDER initialized\n";, cout << "RESOURCEHOLDER destroyed " << j << '\n';, rh2);
	cout << rh2.j << '\n';
	rh2.j += 3;
	{
		//ich könnte schwören struct RESOURCEHOLDER_rh ist doppelt definiert, aber weder VS2010E noch gcc 4.3.4 stören sich dran
		RESOURCEHOLDER(string s;, s = "Hello world"; cout << "RESOURCEHOLDER initialized\n";, cout << "RESOURCEHOLDER destroyed " << s << '\n';, rh);
		cout << rh.s << '\n';
		rh.s += "!!!";
	}
}
