Принцип наименьших привилегий и ключевое слово 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);
} ///:~

1 ответ

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

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

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

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

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

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

Другие вопросы по тегам