I'm just looking at the following code snippet:

```
#include<iostream>
#include<cstring>
using namespace std;

class String
{
private:
    char *s;
    int size;
public:
    String(const char *str = NULL); // constructor
    ~String() { delete [] s; }// destructor
    void print() { cout << s << endl; }
    void change(const char *); // Function to change
};

String::String(const char *str)
{
    size = strlen(str);
    s = new char[size+1];
    strcpy(s, str);
}

void String::change(const char *str)
{
    delete [] s;
    size = strlen(str);
    s = s + 1;
    s = new char[size+1];
    strcpy(s, str);
}

int main()
{
    String str1("StackOverFlow");
    String str2 = str1;

    str1.print();
    str2.print();

    str2.change("StackOverFlowChanged");

    str1.print();
    str2.print();
    return 0;
}

```

I expect the output as:
StackOverflow,
StackOverflow,
StackOverflow,
StackOverflowChanged.

Before **str2.change("StackOverFlowChanged")** line, both str1 and str2's **s** point to the same memory location. However, in **change** method, since the pointer value changed, I except now str1 and str2's **s** point to the different locations and this is not the case. Can somebody explain why this is the case?