最小特权原则和常量关键字
Principle of least privilege and the const keyword
类是关于继承和组合的。使用 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 标识符对于编译器非常有帮助,以便对代码进行只读优化。
如果要将代码链接到最小特权原则,可以按如下方式声明
"无论何时覆盖此函数,您都将在类中拥有读取权限"。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- #定义c-预处理器常量..我做错了什么
- C++中的"inline"关键字
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 如何确保C++函数在定义之前声明(如override关键字)
- 初始化列表中常量变量的"this"关键字
- C++常量关键字异常行为
- 我应该在源文件之间共享的常量的定义中添加关键字"extern"吗
- C++ - 方法和重载中的常量关键字
- 常量关键字用法C++
- 最小特权原则和常量关键字
- 如果您已经知道变量应该是常量,那么为什么要使用关键字const呢
- Volatile关键字允许访问UnitTest++中的常量结构
- 常量关键字和重复方法签名
- 函数头中的常量和静态关键字之间的区别
- Auto关键字和顶级、低级常量
- 清单常量与C++关键字"const"