ABegin(c1); // ACleanクラスを宣言して初期化するマクロ Test a, b, c; Test_init(&a, c1); // こうすることで、AClean_out(c1)したときにdeinit()が自動で呼ばれるようになる. Test_init(&b, c1); Test_init(&c, c1); Test_say(&a, "hello"); ... AClean_out(c1); // これでa,b,cはdeinit()される(c,b,aの順に).
ABegin(c1); char *d = aMalloc(1234, c1); ... AClean_out(c1); // ここでfree(d)もしてくれる.
char *xsprintf(AClean *c, const char *f, ...)
{
char s[1024 * 1024];
va_list ap;
va_start(ap, f);
int l = vsnprintf(s, sizeof s, f, ap);
char *t = aMalloc(l + 1, c);
strcpy(t, s);
va_end(ap);
return t;
}char *s = "";
ABegin(c1);
for (i = 0; i < 100; i++)
s = xsprintf("%d %s", i, s);
puts(s);
AClean_out(c1);99 98 97 96 95 94 93 92 ... 9 8 7 6 5 4 3 2 1 0
AMemAlc0_report1(); // これで消費量がわかる. ... AMemAlc0_report1(); // これで消費量がわかる.