Classes and class hierarchies
C.12
Не делайте члены данных `const` или ссылками в копируемом или перемещаемом типе
Причина
Члены данных const и ссылочные члены данных бесполезны в копируемом или перемещаемом типе и затрудняют использование таких типов, делая их по крайней мере частично некопируемыми/неперемещаемыми по неочевидным причинам.
Пример (плохой)
class bad {
const int i; // плохо
string& s; // плохо
// ...
};
Члены const и & делают этот класс «частично копируемым» — copy-constructible, но не copy-assignable.
Примечание
Если вам нужен член, указывающий на что-то, используйте указатель (сырой или умный, и gsl::not_null, если он не должен быть null) вместо ссылки.
Контроль
Помечать член данных, который является const, & или && в типе, имеющем какую-либо операцию копирования или перемещения.