It's interesting that one of the things C++ got right was having value semantics by default and most of these "problems" are the result of using either references or types that behave like dumb references/pointers such as std::string_view.
What is helpful is move semantics for anything mutable, which was introduced quite recently.