I'd use a pointer to a method table. You'd have less copying on initializing a FD, less memory-overhead, and it might be more forward-compatible. If the VMT is stored in each FD, you will have to look out for every initialization of an FD if you need to introduce a new method. If the VMT is detached, you only need to search the definition of the VMTs.