Your question is the wrong question.
First, C++ default copy/assign is memberwise; it recursively copies/assigns based on what the members do.
Well designed C++ types follow a few patterns in what they do when copied/assigned that lines up with 3 different kinds of primitive types; value, reference amd pointer semantics.
A value semantics type behaves like a value. This corresponds to your "deep copy" roughly. Modifying one variable that follows value semantics never changes another. std::vector is a value semantics type, as is int, double, std::string and other std container types. Value semantics are a strong pattern, and make reasoning about program behaviour easy. Note that value semantics need not be implemented as values; vector is typically implemented as a triple of pointers, with construction/copying/etc overloaded.
A reference semantics type behaves like a C++ reference type -- int&. This is not the same as a Java/C# reference. C++ references are aliases; int& a=b; means a is another name for b. Then a=7 makes both a and b equal 7. If you had another reference c, a=c would not rebind a to refer to c; it would change what a referred to to have the same value as what c referred to.
Complex objects with reference semantics are rare.
A pointer semantics is like reference semantics, but assignment rebinds who it points to. Sometimes an additional operation, like &, is needed to create a new pointer. A type with pointer semantics includes std::reference_wrapper, std::string_view, std::shared_ptr<double>, gsl::span<char> and int*.
Typically it is a bad idea to mix members with different semantics in the same type; the rule of 0/3/5 states that the best move/copy/assogn/ctor/dtor is the empty one. Your resource management types use RAII and write those special members, the other types aggregate them. Value semantics types are not used mixed with reference/pointer in order for the composite class to get coherant semantics.
TL;DR: it depends. Read the documentation on your members. Document what semantics your types have so users know what to expect.
Note, however, that reference semantics is incompatible with being stored in a std container.