Принцип наименьших привилегий и ключевое слово const

Занятия по наследству и составу. Использует const ключевое слово, связанное с принципом наименьших привилегий?

Я понимаю наследование и состав, и я понимаю их, но как насчет принципа наименьших привилегий? Может кто-нибудь объяснить это мне и как исправить мой код, чтобы содержать принцип наименьших привилегий?

class A {
int i;
public:
A(int ii) : i(ii) {}
~A() {}
void f() const {}
};

class B {
int i;
public:
B(int ii) : i(ii) {}
~B() {}
void f() const {}
};

class C : public B {
A a;
public:
C(int ii) : B(ii), a(ii) {}
~C() {} // Calls ~A() and ~B()
void f() const {  // Redefinition
a.f();
B::f();
}
};

int main() {
C c(47);
} ///:~

0

Решение

Прежде всего вам необходимо знать, что лучше всего явно объявить виртуальные деструкторы, чтобы гарантировать, что деструкторы будут вызываться рекурсивно внутри дерева наследования классов. В этом конкретном случае все будет работать, но если вы удалите класс с помощью базового указателя, вы получите деструкторы, которые не будут вызываться (например, B * ptr = new C (47); удалите ptr; вы получите C деструктор не вызывается).

Что касается принципа наименьших привилегий, ключевое слово const указывает компилятору, что во время выполнения функции f () никаких изменений членов класса не будет.

Другими словами, внутри f () неявный этот параметр будет постоянным. Вы не сможете изменить a или B :: i.

Const-идентификаторы очень полезны для компиляторов, чтобы оптимизировать код только для чтения.

Если вы хотите связать свой код с принципом наименьших привилегий, вы можете указать его следующим образом

Msgstr «Всякий раз, когда вы переопределите эту функцию, у вас будет только право на чтение внутри класса».

0

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


По вопросам рекламы [email protected]