Метод возвращает указатель или ссылку на внутренний представитель объекта
Этот дефект возникает, когда:
Метод класса возвращает указатель в представителя данных. Указатели включают указатели и ссылки.
Метод более доступен, чем представитель данных. Например, метод имеет спецификатор доступа public
, но представитель данных private
или protected
.
Спецификатор доступа определяет доступность члена класса. Например, член класса, объявленный с private
не удается получить доступ к спецификатору доступа вне класса. Поэтому функции non member, nonfriend не могут изменять представитель.
Когда метод класса возвращает указатель на менее доступный представитель данных, изменяется доступность представителя. Для образца, если a public
метод возвращает указатель на private
представитель данных, представитель данных эффективно не private
больше. Функция non member, non friend, вызывающая public
метод может использовать возвращенный указатель для просмотра и изменения представителя данных.
Кроме того, если вы присваиваете указатель представителю данных объекта другому указателю, при удалении объекта второй указатель можно оставить висячим. Второй указатель указывает на часть объекта, которая больше не существует.
Одно из возможных исправлений состоит в том, чтобы избежать возврата указателя на представитель данных из метода класса. Возврат представителя данных по значению для возврата копии представителя. Изменение копии не меняет представителя данных.
Если необходимо вернуть указатель, используйте const
квалификатор с типом возврата метода так, чтобы указатель позволял просматривать, но не изменять представитель данных.
Группа: Объектно-ориентированная |
Язык: C++ |
По умолчанию: Off |
Синтаксис командной строки: BREAKING_DATA_ENCAPSULATION |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE : 375, 767 |