НЕ РЕКОМЕНДУЕТСЯ
Не забывайте, что компилятор предоставит стандартный оператор присвоения копий и конструктор копий, если вы не снабдите его ими, но они не будут гарантировать глубокого копирования простых указателей, содержав шихся в пределах класса
Не забывайте, что если вы не предоставите оператор присваивания при перемещении или конструктора перемещения, компилятор не добавит их сам, а вернется вместо этого к обычному оператору присвоения копии и кон структору копий
Не забывайте, что создание операторов не яв ляется обязательным, но все же они повыша ют удобство и простоту использования вашего класса
Не забывайте, что ваш класс интеллектуально го указателя еще не указатель, пока вы не реа лизовали операторы (*) и (->), и он не доста точно интеллектуален, пока вы не реализовали деструктор и не обдумали случаи присвоения копии и создания копии
Вы узнали, как создание операторов может существенно повлиять на легкость исполь-ования вашего класса. При разработке класса, который управляет ресурсами, например динамическим массивом или строкой, в дополнение к деструктору необходимо предоста-ить конструктор копий и оператор присвоения копии как минимум. Вспомогательный ласс, который управляет динамическим массивом, неплохо укомплектовать конструк-ором перемещения и оператором присваивания при перемещении, который гарантиру-т, что содержавшийся ресурс не будет копироваться глубоко для временных объектов.
I наконец, вы узнали, что такие операторы, как и s iz e o f, не могут быть [ереопределены.
Вопросы и ответы
Мой класс инкапсулирует динамический массив целых чисел. Какой минимум функций и операторов я должен реализовать?
При разработке такого класса необходимо четко определить его поведение в случае, когда его экземпляр копируется в другой непосредственно, через присвоение, или кос венно, при передаче функции по значению. Как правило, вы реализуете конструктор копий, оператор присвоения копии и деструктор. В определенных случаях вы также
реализуете конструктор перемещения и оператор присваивания при перемещении, если хотите повысить производительность класса.
■ У меня есть экземпляр o b jec t класса. Я хочу обеспечить такой синтаксис: cout « o b ject;. Какой оператор я должен реализовать?
Необходимо реализовать оператор преобразования, который позволит интерпретиро вать объект вашего класса как тип, который может обработать оператор s t d : : c o u t . Один из способов заключается в том, чтобы определить оператор c h a r* (), как мы уже сделали в листинге 12.2.
Do'stlaringiz bilan baham: |