首页 > 后端开发 > C++ > 从C STL容器继承有风险吗?

从C STL容器继承有风险吗?

Barbara Streisand
发布: 2024-11-29 03:45:09
原创
795 人浏览过

Is Inheriting from C   STL Containers Risky?

从 C STL 容器继承的风险

提出的问题是从标准 C 容器继承是否存在任何真正的风险。作者认为使用 typedef,例如 typedef std::vector费率;,是一种更安全的方法。但是,他们提出了一个特定的用例来探索任何潜在的危险。

用例

考虑以下代码片段:

#include <vector>
#include <iostream>

void kill_it(std::vector<double>& victim) {
    delete &victim;
}

typedef std::vector<double> Rates;
class Charges: public std::vector<double> { };

int main() {
  std::vector<double>* p1, *p2;
  p1 = new Rates;
  p2 = new Charges;
  kill_it(p2);
  kill_it(p1);
  return 0;
}
登录后复制

作者建议,任意不幸的用户可能会在 ??? 中引入错误。部分会导致 Charges(派生类)出现问题,但不会导致 Rates(typedef)出现问题。

虚拟析构函数

这里的关键问题是标准C 容器没有虚拟析构函数。因此,您无法以多态方式处理它们。如果您和代码的所有用户都遵守这一原则,那么从标准容器继承并不是本质上错误的。不过,为了清晰起见,作者建议组合。

组合优于继承

使用组合比从容器继承更干净、更安全。这涉及创建一个新类,其中包含容器的实例作为成员变量。这允许对类的功能具有更大的灵活性和控制力。

在此用例中,例如,定义一个包含 std::vector 实例的新 Rates 类。将允许您添加附加功能,同时仍然利用底层容器。这种方法还可以确保正确处理新类的析构函数,无论基本容器实现如何。

以上是从C STL容器继承有风险吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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