Изменить this в методе класса с++

150
29 апреля 2022, 14:10

Ситуация такова, внутри метода класса List удаляю объект, с которым работаю, а после этого хочу запустить конструктор копирования для этого же объекта, но получается так что этот объект не меняется, подскажите в чем ошибка и как решить вопрос. Код метода:

 List& List::operator=(List& first_list) {
        if (&first_list == this) return (*this);
        n = first_list.n;
        this->~List();
        List::List(first_list);
        return *this; // Не меняется после конструктора копирования, который применяется выше
    }
Answer 1

Если уж вы хотите написать оператор присваивания через копирующий конструктор - да, это возможно. Но тут идиома иная.

Пишется функция swap, которая меняет местами "внутренности" вашего класса с другим. Типа, если есть

class CLASS {
private:
    type1 t1;
    type2 t2;
    ...
swap(CLASS& c) { std::swap(t1,c.t1); std::swap(t2,c.t2); ... }

Ну, а после этого все присваивание сводится к

CLASS& operator=(const CLASS& c)
{
    CLASS tmp(c);
    swap(tmp);
    return *this;
}

Можно даже не писать проверку на присваивание класса самому себе - сработает. Разве что написать ее для эффективности :)

Вот как выглядит эта идиома.

READ ALSO
Передача данных во view

Передача данных во view

Есть модель Articles, там есть 2 метода, первый getArticles, второй getComments

256
ошибка с url register post type

ошибка с url register post type

Здраствуйте,у меня в wordpress есть созданный register_post_type там создан архив car (он верный проверял с помощью функции) в нем есть к примеру машинна...

154
Как проверить пароль в Delphi если он создан в PHP функцией password_hash()

Как проверить пароль в Delphi если он создан в PHP функцией password_hash()

У меня есть самописный сайт на PHPБаза данных MySQL

217
Подключение проекта на php symfony к БД postgresql 13

Подключение проекта на php symfony к БД postgresql 13

Есть проект на symfony и БД postgres 13, пытаюсь провести миграцию "symfony console make:migration"В ответ получаю вот это: Я так понял что при настройке где-то...

257