Should a C++ (implicit or explicit) value constructor accept its parameter(s) by value or reference-to-const, when it needs to store a copy of the argument(s) in its object
Hold a shared_pointer to bar in your class and pass it as such. That way you never call the copy constructor :).