类是关于继承和组合。是否使用与最小权限原则相关的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 :(得分:0)
首先,您需要知道最佳实践是显式声明析构函数virtual,以保证在类继承树中重新调用析构函数。对于这个特定的实例,事情会起作用,但是如果你将通过基指针删除类,你将最终没有调用析构函数(例如B * ptr = new C(47); delete ptr;你最终会得到C& #39; s析构函数未被调用)。
关于最小特权原则,const关键字向编译器声明在执行f()函数期间不会更改类成员。
换句话说,在f()内部,隐含的this参数将是常量。您将无法更改a或B :: i。
Const标识符对于编译器非常有用,以便对代码进行只读优化。
如果要将代码链接到最小权限原则,可以将其说明为
"每当你重写这个函数时,你只会在类中拥有读取权限"。