- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在准备 C++ 考试,我遇到了以下问题:
If you were to inherit from
std::vector
would you create a virtual destructor?
由于 std::vector
没有虚拟析构函数,我创建一个虚拟析构函数还有什么意义吗?
最佳答案
我认为std::vector
是一个转移注意力的话题。首先让我将问题重写为
If you were to write a class
A
that inherits fromstd::vector
, would you give it a virtual destructor?
那么这里唯一相关的是 std::vector 是否已经有一个虚拟析构函数。如果有的话,A
的析构函数将始终自动为 virtual,无论您是否使用 virtual
关键字指定它。但是 std::vector 没有虚拟析构函数。因此可以删除对它的引用:
If you were to write a class
A
, would you give it a virtual destructor?
答案仍然是,如果 A
从具有虚拟析构函数的任何其他类继承,它将自动成为虚拟的,因此剩下的唯一有趣的情况是:
If you were to write a class
A
, which does not inherit from any class with virtual destructor, would you give it a virtual destructor?
现在这是一个非常普遍的问题,正如评论中提到的,这取决于您是否打算使用该类作为多态基,即您是否希望允许删除从 A< 派生的类型的对象
通过指向 A
的指针/引用。
关于C++ 虚拟析构函数从 std::vector 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591153/
我是一名优秀的程序员,十分优秀!