我想知道什么会让程序员选择 Pimpl 惯用法或纯虚拟类和继承。
据我了解,pimpl 习惯用法为每个公共方法和对象创建开销提供了一个显式的额外间接寻址。
另一方面,纯虚拟类为继承实现提供了隐式间接(vtable),并且我知道没有对象创建开销。
EDIT:但是如果你从外部创建对象,你就需要一个工厂
是什么让纯虚拟类不如 pimpl 习惯用法那么受欢迎?
当编写 C++ 类时,应该考虑它是否会
-
值类型
按价值复制,身份从来不重要。它适合作为 std::map 中的键。例如,“字符串”类、“日期”类或“复数”类。 “复制”此类的实例是有意义的。
-
实体类型
身份很重要。始终通过引用传递,而不是通过“值”传递。通常,“复制”类的实例根本没有意义。当确实有意义时,多态“克隆”方法通常更合适。示例:Socket 类、数据库类、“策略”类、任何函数式语言中的“闭包”类。
pImpl 和纯抽象基类都是减少编译时依赖性的技术。
然而,我只使用 pImpl 来实现值类型(类型 1),并且仅在某些时候当我确实想要最小化耦合和编译时依赖性时才使用。通常,这是不值得打扰的。正如您正确指出的那样,存在更多语法开销,因为您必须为所有公共方法编写转发方法。对于类型 2 类,我总是使用带有关联工厂方法的纯抽象基类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)