最小特权原则和常量关键字

Principle of least privilege and the const keyword

本文关键字:关键字 常量 最小特权原则      更新时间:2023-10-16

类是关于继承和组合的。使用 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);
} ///:~
首先,

您需要知道最佳实践是显式声明析构函数为虚拟,以保证析构函数在类继承树中被重新调用。对于这个特定的实例,事情会起作用,但是如果你通过基指针删除类,你最终会得到不被调用析构函数的结果(例如 B* ptr = new C(47(; 删除 ptr;你最终会得到 C 的析构函数不被调用(。

关于最小特权原则,const 关键字向编译器声明在执行 f(( 函数期间不会更改类成员。

换句话说,在 f(( 中,隐式的 this 参数将是常量。您将无法更改 a 或 B::i 。

Const 标识符对于编译器非常有帮助,以便对代码进行只读优化。

如果要将代码链接到最小特权原则,可以按如下方式声明

"无论何时覆盖此函数,您都将在类中拥有读取权限"。