Bucket *Bucket_new(size_t size, const char *key, const void *value, size_t value_size){ Bucket *bucket = malloc(size); check_mem(bucket); bucket->init = Bucket_init; bucket->destroy = Bucket_destroy; bucket->print = Bucket_print; bucket->get = Bucket_get; bucket->set = Bucket_set; if(bucket->init(bucket, key, value, value_size) == EXIT_FAILURE) { throw("bucket init failed"); } else { // all done, we made an object of any type return bucket; } error: if(bucket) { bucket->destroy(bucket); }; return NULL; };