"Michael S. Tsirkin" <m...@redhat.com> wrote: > On Sun, Mar 21, 2010 at 06:11:43PM +0000, Jamie Lokier wrote: >> Michael S. Tsirkin wrote: >> > That's version 1 of my patch. Version 2 removed even need for macro >> > completely by moving allocations to the caller. >> >> The downside of moving allocations are: (1) it's one more call in the >> caller, to allocate the type, (2) it needs a virtual destructor for >> each type to free the object, which can clutter the code if there is >> no other reason for virtual destructors. > > BTW I don't understand why do you refer to virtual destructors here. > When virtio-net.c allocates and frees structure of type VirtIONet > this is analogous to regular destructur, not a virtual one.
If you remove it in virtio-net.c, you are right. If your remove it in virtio.c, then you need the equivalent of a virtual destructor (somehow you need to find a field that is an offset and do a free(pointer- offset). If struct VirtIODevice is the 1st field of everything, then a simple free(pointer) is enough and does the right thing. Notice that as just now there is no free call, you can put it in either place. >> I don't think those are necessarily bad, but they can remove from the >> neatness of existing code. Personally I favour an occasional macro >> using sizeof/offsetof/container_of if the result is a natural and >> sensible API to all of its callers. >> >> -- Jamie Later, Juan.