0

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

1 回答 1

0

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

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

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

常量标识符对编译器非常有用,以便对代码进行只读优化。

如果您想将您的代码链接到最低权限原则,您可以将其声明如下

“无论何时您将覆盖此功能,您将仅在类内具有读取权限”。

于 2014-12-16T07:29:14.623 回答