Don't allocate memory. Instead of a 'type' parameter, take a pointer to a new object (allocated by an arbitrary allocator), and initialize its object header fields.
See Implementation
Don't allocate memory. Instead of a 'type' parameter, take a pointer to a new object (allocated by an arbitrary allocator), and initialize its object header fields.