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