3 Deep copy

To fix the problem described in 2.2, we can create a deep copy constructor for class Y:

 
1class Y 
2{ 
3    char *pMessage; // pointer to a message 
4  protected
5    void clone(const Y &y); 
6  public
7    Y(void{ pMessage = 0; } 
8    Y(const Y &y); 
9    ˜Y(void{ if (pMessage) delete pMessage; } 
10    void setMessage(const char *); 
11    const char *getMessage(voidconst
12}
13 
14void Y::clone(const Y &y) 
15{ 
16  if (pMessage) delete pMessage; 
17  pMessage = new char[strlen(y.pMessage)+1]; 
18  strcpy(pMessage, y.pMessage); 
19} 
20 
21Y::Y(const Y &y) 
22{ 
23  clone(y); 
24}