首页 > 后端开发 > C++ > 为什么应该避免继承`std::string`?

为什么应该避免继承`std::string`?

Susan Sarandon
发布: 2024-12-10 19:09:14
原创
882 人浏览过

Why Should You Avoid Inheriting from `std::string`?

为什么从 std::string 继承是不明智的

在《Effective C》中,重点是虚拟的析构函数对于类表现出多态行为的能力至关重要。因此,std::string 中缺少虚拟析构函数,有效地禁止从中派生。这引出了我们的问题:一个类必须满足哪些附加条件才能成为合适的基类?

基类状态的资格

与隐含的假设相反在这个问题中,一个类不需要支持多态性来充当基类。 C 中的继承有两个主要目的:

  1. 私有继承:此技术用于创新实践,例如 mixins 和基于模板的面向方面编程。
  2. 公共继承:这种形式的继承严格保留用于建立多态

std::string 作为基类

原因不仅仅是缺少虚拟析构函数。 std::string 从未打算用作基类、多态类或其他类。这可以归因于 C 中类的属性。

与其他类是引用类型的面向对象语言不同,C 将类视为值类型。因此,当复制基类对象时,仅复制其成员,而不复制任何派生类的成员。这种现象称为切片问题,可能会导致不一致和错误行为。

因此,在 C 中,使用非友元、非成员函数而不是实现方法扩展的继承被认为是最佳实践或组成。继承应该保留用于模板元编程或建立多态行为。

防止非多态继承

在基类仅用于代码可重用性的情况下,有没有有效的方法来阻止创建指向派生类的指针。但是,使用私有继承、限制派生类方法的访问以及避免公共基类方法可能会阻碍它们的使用。

以上是为什么应该避免继承`std::string`?的详细内容。更多信息请关注PHP中文网其他相关文章!

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