// code4.c
int createAobject (A * pA)
{
int err, errlevel = 0;
// 创建对象的次序: a0,a1,a2,a3,a4,a5,a
a0 = create_obj();
check_null_object(a0, 0);
a1 = create_obj();
check_null_object(a1, 1);
a2 = create_obj();
check_null_object(a2, 2);
a3 = create_obj();
check_null_object(a3, 3);
a4 = create_obj();
check_null_object(a4, 4);
err = init_obj(&a5);
check_ret_error(err, 5);
a = create_objA(a0, a1, a2, a3, a4, a5);
check_null_object(a, 6);
// success
*pA = a;
return 0;
onerror_exit:
// 删除对象的次序: a,a5,a4,a3,a2,a1,a0
onerror_case_begin(7, destroyAobject(a));
onerror_case_level(6, delete_obj(a));
onerror_case_level(5, uninit_obj(a5));
onerror_case_level(4, delete_obj(a4));
onerror_case_level(3, delete_obj(a3));
onerror_case_level(2, delete_obj(a2));
onerror_case_level(1, delete_obj(a1));
onerror_case_level(0, delete_obj(a0));
onerror_case_end();
return -1;
}
void destroyAobject(a)
{
uninit_obj(a->a5);
delete_obj(a->a4));
delete_obj(a->a3));
delete_obj(a->a2));
delete_obj(a->a1));
delete_obj(a->a0));
delete_obj(a);
}