gpt4 book ai didi

c++ - Pimpl 成语 vs 纯虚拟类接口(interface)

转载 作者:IT老高 更新时间:2023-10-28 11:51:11 26 4
gpt4 key购买 nike

我想知道是什么让程序员选择 Pimpl 习惯用法或纯虚拟类和继承。

我知道 pimpl idiom 为每个公共(public)方法和对象创建开销都提供了一个显式的额外间接。

另一方面,纯虚拟类带有用于继承实现的隐式间接(vtable),我知道没有对象创建开销。
编辑:但是如果您从外部创建对象,则需要一个工厂

是什么让纯虚类不如 pimpl 成语那么受欢迎?

最佳答案

在写C++类的时候,适当考虑一下会不会是

  1. 值类型

    按值(value)复制,身份从来都不重要。它适合作为 std::map 中的键。例如,“字符串”类,或“日期”类,或“复数”类。 “复制”此类的实例是有意义的。

  2. 实体类型

    身份很重要。始终通过引用传递,从不通过“值”。通常,“复制”类的实例根本没有意义。当它确实有意义时,多态“克隆”方法通常更合适。示例:Socket 类、Database 类、“策略”类、任何在函数式语言中可能是“闭包”的东西。

pImpl 和纯抽象基类都是减少编译时间依赖性的技术。

但是,我只使用 pImpl 来实现值类型(类型 1),并且仅在我真的想最小化耦合和编译时依赖关系时才使用。通常,这不值得费心。正如您正确指出的那样,存在更多的语法开销,因为您必须为所有公共(public)方法编写转发方法。对于类型 2 类,我总是使用带有关联工厂方法的纯抽象基类。

关于c++ - Pimpl 成语 vs 纯虚拟类接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com