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