Ситуация такова, внутри метода класса 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; // Не меняется после конструктора копирования, который применяется выше
}
Если уж вы хотите написать оператор присваивания через копирующий конструктор - да, это возможно. Но тут идиома иная.
Пишется функция 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;
}
Можно даже не писать проверку на присваивание класса самому себе - сработает. Разве что написать ее для эффективности :)
Вот как выглядит эта идиома.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть модель Articles, там есть 2 метода, первый getArticles, второй getComments
Здраствуйте,у меня в wordpress есть созданный register_post_type там создан архив car (он верный проверял с помощью функции) в нем есть к примеру машинна...
У меня есть самописный сайт на PHPБаза данных MySQL
Есть проект на symfony и БД postgres 13, пытаюсь провести миграцию "symfony console make:migration"В ответ получаю вот это: Я так понял что при настройке где-то...