myfunc(*this) is fine as long as it is announced that myfunc accepts the link - what it is.
This will not copy the object. It will pass a link to the source object. In addition, it will not cut the object. The link will be of type Base& , but the object to which it refers will not change.
Just to let you know that if you then wrote polymorphic (e.g. virtual ) methods on this Base& , polymorphism will still work correctly and do what you expect - just as if you were calling through a pointer. In other words:
Base& b = *derived; b.SomeVirtualFoo();
... will have the same effect as:
Base* b = derived; b->SomeVirtualFoo();
source share