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

为什么应该避免从 C std::string 类继承?

Susan Sarandon
Susan Sarandon原创
2024-12-15 21:28:10259浏览

Why Should You Avoid Inheriting from the C   std::string Class?

避免从 C std::string 类继承的原因

在《Effective C》中,避免从 std::string 继承的建议是基于它缺乏虚拟析构函数并且不适合作为基类,即使对于多态目的也是如此。了解类作为基类的具体要求以及从 std::string 派生的后果进一步阐明了这一立场。

基类继承的资格

C 中的继承性与多态行为的需求紧密结合。仅当打算通过指针或引用访问类时才应使用公共继承,从而允许动态绑定。否则,自由函数或组合是代码重用的首选机制。

std::string 作为基类

对于 std::string,缺少虚拟析构函数会导致它无法有效支持多态行为。此外,其内部设计并不打算用作基类。

从 std::string 派生的问题

从 std::string 派生会引入潜在问题由于 C 中的切片行为。例如,如果函数需要 std::string 参数,则传递派生对象将导致截断的副本,其中排除派生类的其他成员。这可能会导致不一致和未定义的行为。

防止非多态基类使用

防止客户端纯粹为了可重用而使用基类,就好像它是一个多态基类,可以采用以下技术使用:

  • 私有继承:通过继承限制对基类的访问。
  • 使用非成员函数:定义外部函数到班级以避免切片并提升代码重用。
  • 封装:对客户端隐藏基类接口,以限制其可见性并防止不当使用。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn