Deep copy vs Shallow copy:

  1. Deep Copy copies all the dynamically allocated members properly to destination.
  2. Deep copy is safe and prevents memory corruptions or memory overwriting.
  3. 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.

#