struct List {
    int size;
    int* items;
    List& operator=(const List& l);
};
List& List::operator=(const List& l)
{
    delete[] items;
    size = l.size;
    items = new int[20];
    for (int i = 0; i < size; i++)
        items[i] = l.items[i];
    return *this;
}
ostream& operator<<(ostream& out, const List& l)
{
    out << "Size: " << l.size << "\t {";
    for (int i = 0; i < l.size; i++)
        out << l.items[i] << " ";
    return (out << "}");
}
int main()
{
    int size = 6;
    List l1 = { size, new int[size]{ 0, 1, 2, 3, 4, 5 } };
    List l2 = l1;
    l2.items[1] = 50;
    cout << l1 << endl;
    cout << l2 << endl;
    return 0;
}
I'm confused since when I assign l2 = l1 by using an overloaded operator, why does the contents of l1 change, when altering l2 later on? Especially since l1 is passed as a const. They somehow point to the same object in memory instead of being a copy.
 
     
     
    