Step 12 (S-41021)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/550/step/12

Ниже даны несколько вариантов реализации оператора присваивания для класса String, выберите из них некорректные реализации, т.е. такие, которые неправильно работают с памятью (допускают утечки, обращаются к освобожденной памяти, используют неинициализированные указатели), нарушают семантику оператора присваивания или инвариант класса.

1.


String &operator=(const String &other) {
    str = new char[other.size + 1];
    strcpy(str, other.str);
    size = other.size;
    return *this;
}


2.


String &operator=(const String &other) {
    delete[] str;
    str = new char[other.size + 1];
    strcpy(str, other.str);
    size = other.size;
    return *this;
}


3.


String &operator=(const String &other) {
    if (this != &other) {
        str = other.str;
        size = other.size;
    }
    return *this;
}