Used when copying objects, happens when:
- passing object by value as a parameter
- returning object by value
- construct ingobject based on another w/ same class
C++ provides compiler-defined constructor if no user-defined
- default
- memberwise copy, values of each data member copied to new object
- pointers
- pointer is copied, not what it points to
- [[Shallow Copy]] vs. [[Deep Copy]]
## Best Practices
- Provide copy constructor if class has raw pointer members
- const reference parameter
- prevents modification of source object
- STL classes provide copy constructors
- Avoid raw pointer members if possible
## Declaration
```cpp
Player::Player(const Player &source);
```