The Rule of three is a rule of thumb when using C++. This is kind of a good practice rule that says that If your class needs any of
defined explicitly, then it is likely to need all three of them.
Why is this? It’s because, if your class requires any of the above, it is managing dynamically allocated resources and would likely be needing the other to successfully achieve that. For example, if you require an assignment operator, you would be creating copies of objects currently being copied by reference, hence allocating resources. You'll need the copy constructor for copying and destructor for freeing up these resources.
1. copy constructor − The compiler-supplied copy constructor does a member-wise copy of all the Foo Manager’s attributes. This poses the same problems as the assignment operator.
2. assignment operator − If you do not provide one the compiler creates a default assignment operator. The default assignment operation is a member-wise copy function and does a shallow copy and not a deep copy. This could cause problems like memory leaks, wrong assignment.
3. destructor − When this manager goes out of scope it should free all the resources it was managing.