首页 > 后端开发 > C++ > 您应该从 C STL 容器派生吗?

您应该从 C STL 容器派生吗?

Barbara Streisand
发布: 2024-12-01 13:46:13
原创
528 人浏览过

Should You Derive from C   STL Containers?

从 C STL 容器派生的潜在陷阱

在 C 编程领域,经常会出现关于派生的优点的争论来自标准库的容器(C 标准库附带的容器,例如向量、列表等)或简单地使用 typedef 来表示它们(为现有类型创建新名称而不定义新类型)。虽然这两种方法各有优势,但了解从 STL 容器派生相关的潜在风险至关重要。

使用派生时,必须记住标准容器(例如向量)不将它们的析构函数声明为虚拟的。这意味着,如果您从这些容器之一派生并在派生类中定义非虚拟析构函数,则在尝试使用指向基类的指针销毁该派生类的对象时会遇到问题。

为了说明这个问题,请考虑以下示例:

class Rates : public std::vector<double> { /* ... */ };

int main() {
    std::vector<double>* p = new Rates;
    delete p;  // This will invoke the non-virtual ~std::vector<double>(), potentially leading to problems
}
登录后复制

在这种情况下,当对指针 p 调用删除运算符时,它将调用基类的析构函数, std::vector,而不是派生类 Rates 的析构函数。如果派生类包含需要在销毁期间清理的额外资源,这可能会导致问题。

因此,虽然从 STL 容器派生提供了某些优势,例如启用函数重载和模板专门化,但至关重要谨慎行事并确保您不会使用非虚拟析构函数覆盖基类析构函数。如果您需要多态行为,请考虑使用组合而不是继承。

以上是您应该从 C STL 容器派生吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板