避免从 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中文网其他相关文章!