подкачка копирования: что если я поменяю учеников?

У меня есть класс

class MyClass
{
public :
int a;
int b;
}

Для использования идиомы copy-swap я создаю функцию

void MyClass::swap(MyClass& other)
{
std::swap(a,other.a);
std::swap(b,other.b);
}

Если позже я изменю свой класс и удалю участника a, то компилятор будет жаловаться в swap функция, и это нормально.

Но если я добавлять новый член мой swap функция больше не правильная. Что я могу сделать, чтобы не забыть добавить нового члена в функцию подкачки?

2

Решение

Проблема в том, что ваш ответ не является копией и подстановкой. Фактическая идиома копирования и обмена заключается в написании конструктора копирования и перемещении операций для класса. Последний даст вам эффективную операцию свопинга через std :: swap. Затем вы пишете свое назначение копирования, вызывая конструктор копирования вашего класса для создания локальной копии. Затем поменяйте местами это с временным. Вы не делаете это член за членом.

Лучший способ не забыть — просто не писать какие-либо специальные функции-члены и попросить компилятор сгенерировать их для вас. Это называется правилом нуля. Большинству классов не нужно писать эти методы, а просто выбирать элементы (или писать) так, чтобы сгенерированные были правильными. Одной из причин является отсутствие дополнительного обслуживания при добавлении участника.

Наконец, если вы пишете класс управления ресурсами и пишете эти функции вручную, вам не обязательно использовать копирование и обмен. Копирование и обмен в основном обменивают производительность для безопасности исключительной ситуации. Я почти никогда не использовал строгую безопасность исключений, и во многих областях просто не практично так писать. Так что используйте его только в случае необходимости.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector