Deep copy vs Shallow copy:
- Deep Copy copies all the dynamically allocated members properly to destination.
- Deep copy is safe and prevents memory corruptions or memory overwriting.
- When dealing with string, list, vectors, or any other dynamically allocated members deep copy is mandatory.
Example:
Comment out the below functions in the following example and see how you face problem at runtime.
#include<string.h> #include<iostream.h> class User { protected: int user_id; char *user_name; public: User() { user_id = 0; user_name = new char[10]; } ~ User() { user_id = 0; delete [] user_name; } int get_id() { return user_id; } void set_id(int id) { user_id = id; } char* get_name(void) { return user_name; } void set_name(char* name) { strcpy(user_name, name); } /*Comment out this function*/ User(User &u) { user_id = u. user_id; user_name = new char[10]; strcpy(user_name, u.user_name); } /*Comment out this function*/ User & operator = (User &u) { user_id = u. user_id; strcpy(user_name, u.user_name); return *this; } }; void main(int argc, char *argv[]) { User user1; user1.set_id(1); user1.set_name("User1"); User user2(user1); cout << "User1 id " << user1 .get_id() << ", User1 name " << user1 .get_name() << endl; cout << "User2 id " << user2 .get_id() << ", User2 name " <<user2 .get_name() << endl; cout.flush(); user1.set_id(2); user2.set_name("User2"); cout << "User1 id " << user1.get_id() << ", User1 name " << user1 .get_name() << endl; cout << "User2 id " <<user2.get_id() << ", User2 name "<<user2 .get_name() << endl; cout.flush(); }
About our authors: Team EQA
You have viewed 1 page out of 62. Your C++ learning is 0.00% complete. Login to check your learning progress.